J'ai testé en remplaçant Tiles 2 par les Facelets, et j'ai eu le même problème ! J'ai donc fait quatre projets de test.
MyFaces seul fonctionne.
Mojarra (l'implémentation Sun de JSF) seul fonctionne
MyFaces et Facelets a le même problème.
Mojarra et Facelets a le même problème!
Ce dernier résultat m'a surpris, ma logique doit être incorrecte.
Le projet de test consiste en un formulaire avec un champ texte prenant un nombre entier, un lien "ok" et un lien "cancel". Le lien cancel a l'attribut immediate à true, mais pas le lien ok. Donc cliquer sur ok devrait changer la valeur du champ, et cliquer sur cancel revenir à la valeur précédente.
Mais quand j'utilise facelets, les deux liens mettent le formulaire à jour !
Voilà le code du test MyFaces et Facelets.
web.xml :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>TestMojarraFacelets</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
</context-param>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
</web-app> |
faces-config.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| <?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
<application>
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>
<managed-bean>
<managed-bean-name>pageBean</managed-bean-name>
<managed-bean-class>test4.PageBean</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>/hello.jsp</from-view-id>
<navigation-case>
<from-outcome>self</from-outcome>
<to-view-id>/hello.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config> |
hello.xhtml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<body>
<f:view>
<h:form id="aform">
<h:inputText value="#{pageBean.intField}"/>
<br />
<h:commandLink action="#{pageBean.ok}" value="ok" />
<br />
<h:commandLink action="#{pageBean.cancel}" value="cancel" immediate="true" />
</h:form>
</f:view>
</body>
</html> |
index.jsp
<jsp:forward page="hello.jsf"/>
PageBean.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| package test4;
public class PageBean {
private Integer intField = 13;
public Integer getIntField() {
return intField;
}
public void setIntField(Integer intField) {
this.intField = intField;
}
public String ok() {
return "self";
}
public String cancel() {
return "self";
}
} |
J'espère que quelqu'un peut m'aider. Je peux envoyer les quatres projets si vous le vouler.
Cordialement,
Partager