IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Problème de navigation


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Par défaut Problème de navigation
    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...

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Rajoute un peu ca dans ta config du faces :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <from-outcome>retour</from-outcome>

  3. #3
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 45
    Par défaut
    Je confirme: ton faces-config est faux

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Par défaut
    J'ai refait un test en ajoutant le from-outcome, mais ça ne change rien.

    Mais bon, c'est logique puisque cette clause est facultative (et d'ailleurs on a bien test2.jsp en fin de phase 5).

    Ce qui m'énerve, c'est ce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Fin   - INVOKE_APPLICATION 5 - /test2.jsp
    Début - RENDER_RESPONSE 6 - /test.jsp
    Si je comprends bien, la navigation décide qu'il faut passer à test2.jsp, mais c'est test.jsp qui est rendu...
    Un peu comme si il ne trouvait pas test2.jsp, et donc qu'il repassait à test.jsp par défaut...

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    t'aurais pas un autre phase listener en route qui fait du forcing?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Par défaut
    Pas d'autre phase-listener ni de navigation-handler...

    Pour le reste, je ne sais pas quoi chercher d'autre, je débute.

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 67
    Par défaut
    ben en voyant ceci,
    http://www.jsftutorials.net/jsf-navi...-examples.html
    tout comme DevServlet j'aurais dit que ceci fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <navigation-rule>
    	<from-view-id>/test.jsp</from-view-id>
    	<navigation-case>
    		<from-outcome>retour</from-outcome>
    		<to-view-id>/test2.jsp</to-view-id>
    	</navigation-case>
    </navigation-rule>
    je démarre moi aussi en JSF. Je n'ai pas eu de soucis avec ce genre de notation.
    - Se pourrait'il que ton faces-config.xml ne soit pas au bon endoit ? (je crois /WEB-INF, ou autre chemin spécifié par javax.faces.CONFIG_FILES dans web.xml)
    - Les fichiers *.jsp sont-ils bine à la racine de ton appli ?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Par défaut
    J'ai trouvé la solution... mais elle ne me plait pas.

    J'ai reproduit les deux pages + faces-config dans un autre projet : cette fois ça a fonctionné correctement.

    Du coup, j'ai mis divers points d'arrêt, et j'ai constaté que la pile d'appel n'était pas exactement la même dans les deux cas (n° de ligne différents).

    J'ai donc comparé jsf-api.jar et jsf-impl.jar dans les deux projets, et ils se sont évidemment avérés différents. En recopiant ces deux fichiers dans le projet initial, tout s'est mis à fonctionner correctement.

    Du coup, j'ai quelques questions :
    - y a-t-il d'autres .jar à surveiller/remplacer (ces 2 là suffisent-ils) ?
    - Comment connaître les numéros de version des lib (pas d'info de version dans les propriétés des fichiers) ?
    - Les jar que j'utilisais étaient-ils vraiement buggés, ou bien le problème vient-il d'autre chose ?

    Si quelqu'un peut éclairer ma lanterne...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de navigation
    Par AnnaShow dans le forum Windows XP
    Réponses: 3
    Dernier message: 27/02/2007, 13h25
  2. [SOLARIS] Problèmes de Navigation
    Par mirlidas dans le forum Solaris
    Réponses: 1
    Dernier message: 30/01/2007, 09h49
  3. Problème de navigation d'une iframe à une autre
    Par coquin dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 05/07/2006, 09h45
  4. problème de navigation dans un fichier.
    Par Mousk dans le forum C
    Réponses: 3
    Dernier message: 26/03/2006, 20h20
  5. Problème de navigation réalisé avec CSS
    Par Mihai dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 18/09/2005, 18h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo