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>
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>
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
 
<?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>
...
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.


Pour tenter de piger ce qui se passe, j'ai créé une classe dérivée de PhaseListener :
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;
	}
}
Dans faces-config :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
	<lifecycle>
		 <phase-listener>fr.cud.MonLifeCycleListener</phase-listener>
	</lifecycle>
Et voilà le résultat :
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
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 !

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...