Une solution consiste à ajouter une méthode d'action au bean - il est possible de le faire traiter lui-même.
Par exemple, ce haricot simple:
public class SimpleBean {
private String forename;
private String surname;
public String processData() {
// TODO: real work
System.out.println("forename=" + forename);
System.out.println("surname=" + surname);
return null; // optional navigation rule
}
public String getForename() {
return forename;
}
public void setForename(String forename) {
this.forename = forename;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
}
... défini dans WEB-INF/faces-config.xml:
<managed-bean>
<managed-bean-name>simpleBean</managed-bean-name>
<managed-bean-class>simplebean.SimpleBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
... peuvent être traités en utilisant la présente JSP :
<?xml version="1.0" encoding="UTF-8" ?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<jsp:directive.page language="java"
contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" />
<jsp:text>
<![CDATA[<?xml version="1.0" encoding="UTF-8" ?>]]>
</jsp:text>
<jsp:text>
<![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">]]>
</jsp:text>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Enter Name</title>
</head>
<body>
<f:view>
<h:form>
<h:panelGrid columns="2">
<h:outputText value="forename:" />
<h:inputText id="it1" value="#{simpleBean.forename}" />
<h:outputText value="surname:" />
<h:inputText id="it2" value="#{simpleBean.surname}" />
</h:panelGrid>
<h:commandButton action="#{simpleBean.processData}"
value="process" />
</h:form>
</f:view>
</body>
</html>
</jsp:root>
Notez la méthode de liaison # {simpleBean.processData}. Cela doit être une méthode publique qui ne prend aucun argument et renvoie un argument String (qui peut être utilisé pour la navigation dans les pages si vous le souhaitez).
Ce n'est pas la seule façon d'y parvenir, mais c'est assez simple.
Encore merci McDowell! Je n'ai pas pensé à mettre "ça" dans le même grain, mais c'est assez évident. Donc j'appelle simplement la méthode nécessaire dans le 'processData' comme: method (this), et tout fonctionne. –