Bonjour,
Voici un petit problème de navigation sur lequel je m'arrache les cheveux depuis plusieurs jours.
J'ai deux pages : test.jsp et test2.jsp. Chacune contient simplement un bouton pour passer à l'autre page.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <f:view> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>test</title> </head> <body> <h:form id="formTest"> ok <h:commandButton value="ok" action="ok" /> </h:form> </body> </html> </f:view>Côté faces-config, c'est ultra simple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <f:view> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>test</title> </head> <body> <h:form id="formTest2"> retour <h:commandButton value="retour" action="retour" /> </h:form> </body> </html> </f:view>
Mon problème est que lorsque je clique sur le bouton d'une page, la même page se réaffiche au lieu de basculer sur l'autre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN" "http://java.sun.com/dtd/web-facesconfig_1_0.dtd"> <faces-config> <navigation-rule> <from-view-id>/test.jsp</from-view-id> <navigation-case> <to-view-id>/test2.jsp</to-view-id> </navigation-case> </navigation-rule> <navigation-rule> <from-view-id>/test2.jsp</from-view-id> <navigation-case> <to-view-id>/test.jsp</to-view-id> </navigation-case> </navigation-rule> ...
Pour tenter de piger ce qui se passe, j'ai créé une classe dérivée de PhaseListener :
Dans faces-config :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public class MonLifeCycleListener implements PhaseListener { public void afterPhase(PhaseEvent arg0) { System.out.println("Fin - " + arg0.getPhaseId() + " - " + arg0.getFacesContext().getViewRoot().getViewId()); } public void beforePhase(PhaseEvent arg0) { System.out.println("Début - " + arg0.getPhaseId() + " - " + arg0.getFacesContext().getViewRoot().getViewId()); } public PhaseId getPhaseId() { return PhaseId.ANY_PHASE; } }
Et voilà le résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <lifecycle> <phase-listener>fr.cud.MonLifeCycleListener</phase-listener> </lifecycle>
On peut voir que test2.jsp est choisi à la fin de la phase INVOKE_APPLICATION... mais qu'on change d'avis avant le début de RENDER_RESPONSE !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Début - APPLY_REQUEST_VALUES 2 - /test.jsp Fin - APPLY_REQUEST_VALUES 2 - /test.jsp Début - PROCESS_VALIDATIONS 3 - /test.jsp Fin - PROCESS_VALIDATIONS 3 - /test.jsp Début - UPDATE_MODEL_VALUES 4 - /test.jsp Fin - UPDATE_MODEL_VALUES 4 - /test.jsp Début - INVOKE_APPLICATION 5 - /test.jsp Fin - INVOKE_APPLICATION 5 - /test2.jsp Début - RENDER_RESPONSE 6 - /test.jsp Fin - RENDER_RESPONSE 6 - /test.jsp
Si quelqu'un peut m'expliquer les raisons de ce comportement bizarre... il m'aidera sans doute à conserver des cheveux et ma santé mentale
Merci par avance.
PS : je tente d'ajouter des fonctionnalités à une appli que j'ai récupéré, la réponse est peut-être due à d'autres parties du faces-config que je n'ai pas fourni ici...
Partager