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 :

Comportement URL >> Naviguation Rule


Sujet :

JSF Java

  1. #1
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Par défaut Comportement URL >> Naviguation Rule
    Bonjour à tous,

    Je débute avec JSF et j'esseye juste de faire la navigation entre 2 pages. Pas bien méchant donc, mais ca soulève quelques interrogations chez moi

    J'ai donc index.jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
     
    <html>
      <head><title>Test</title></head>    
      <body>
         <f:view>
           	<h:form>
    			<h:commandLink action="go_signin" value="Inscrivez-vous !" />
    		</h:form>
         </f:view>
     </body>
    </html>
    signin.jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
     
    <html>
      <head><title>Test</title></head>    
      <body>
         <f:view>
         	<h:form>
    			<h:commandLink value="Retour à l'accueil" action="go_index" />
    		</h:form>		
         </f:view>
     </body> 
    </html>
    Mes règles de navigation
    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
    20
     
    	<navigation-rule>
    		<display-name>index</display-name>
    		<from-view-id>/index.jsp</from-view-id>
    		<navigation-case>
    			<from-outcome>go_signin</from-outcome>
    			<to-view-id>/signin.jsp</to-view-id>
    			<redirect/>
    		</navigation-case>
    	</navigation-rule>
     
    	<navigation-rule>
    		<display-name>signin</display-name>
    		<from-view-id>/signin.jsp</from-view-id>
    		<navigation-case>
    			<from-outcome>go_index</from-outcome>
    			<to-view-id>/index.jsp</to-view-id>
    			<redirect/>
    		</navigation-case>
    	</navigation-rule>
    J'accède à index.jsp par les url :
    1) http://localhost:8080/in56/faces/index.jsp
    ou implicitement
    2) http://localhost:8080/in56/faces/


    Lorsque j'utilise la première url, pas de problème, lorsque ma souris est sur le lien, je pointe vers : http://localhost:8080/in56/faces/index.jsp# qui me redirige vers http://localhost:8080/in56/faces/signin.jsp


    Mais lorsque j'utile l'url implicite pour entrer sur le site, lorsque ma souris est sur le lien, je pointe vers http://localhost:8080/in56/faces/# qui le redirige nul part évidement, ca rafraichit juste la page...

    Comme si la page ne savait pas qui elle était du fait que son nom ne soit pas dans l'url...


    Si quelqu'un peut m'expliquer le pourquoi du comment ca serait cool

    Merci

    Question annexe : Pourquoi quand je pointe vers "http://localhost:8080/in56/faces/index.jsp#" avec la souris sur le lien, on me redirige vers http://localhost:8080/in56/faces/signin.jsp ? Bien que ca fasse ce que je veux, je trouve pas ca très <<ergonomique>>

  2. #2
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Alors la navigation en JSF n'est pas aussi simple ou "ergonomique". En réalité, c'est normal que l'URL que tu vois en survolant le lien ne soit pas l'URL "attendue", car en fait le lien ne sait pas vers quelle page cela va rediriger l'utilisateur !
    De plus, tous les liens JSF soumettent des formulaires via JavaScript.

    Je ne vais pas trop rentrer dans les détails, mais un autre aspect important est que JSF fonctionne sur le principe du postback (du moins son comportement par défaut), et qu'en fait la navigation entre les pages est géré du coup en interne, par le framework JSF...


    Bon comment ça marche les navigations ? Dans un commandLink / commandButton, tu as un attribut "action", qui peut être soit statique (dans ton cas), ou bien faire appel à une action Java (côté serveur). Quelque chose du type action="#{monBean.monAction}". Cette action a la signature suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public String monAction() { ... }
    La chaine de caractères retournée va correspondre à l'ID de la règle de navigation à appliquer. Quand tu définis une action statique (par ex. <h:commandLink action="go_signin"), c'est exactement pareil. La seule différence, c'est qu'il n'y a pas de traitement spécifique côté serveur.

    Dans tes règles de navigation, tu définis ceci :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        <navigation-rule>
            <display-name>index</display-name>
            <from-view-id>/index.jsp</from-view-id>
            <navigation-case>
                <from-outcome>go_signin</from-outcome>
                <to-view-id>/signin.jsp</to-view-id>
                <redirect/>
            </navigation-case>
        </navigation-rule>

    Pour JSF, ça signifie ceci : "Quand l'utilisateur est sur la page index.jsp, et qu'il exécute une action qui retourne comme valeur "go_signin", il faut le rediriger vers la page signin.jsp".

    L'intérêt c'est qu'un même bouton peut définir plusieurs redirections possibles. Prennons un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:commandButton value="Valider" action="#{monBean.valider}"/>
    Ensuite, dans le code Java, je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public String valider() {
        // Je fais des trucs...
        if (someErrorsOccured) {
            return "error";
        }
        return "new_page";
    }
    Enfin, dans le fichier faces-config.xml, je définis 2 règles de navigation. L'une indique de diriger l'utilisateur vers la page "error.jsp" si from-outcome="error", l'autre indique de rediriger vers la page "new_page.jsp". Bien sûr, tu peux multiplier les cas...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  3. #3
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Par défaut
    Merci pour tes explications très claires.

    Et pourquoi mon lien vers signin ne marche pas quand j'accède à index.jsp avec l'url implicite : http://localhost:8080/in56/faces/

    alors qu'il marche parfaitement si j'y accède par :
    http://localhost:8080/in56/faces/index.jsp

    Y'a t-il une solution ?

    merci

  4. #4
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  5. #5
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 65
    Par défaut
    Merci

    J'ai pas mal d'autre question au niveau des sessions etc, mais jvais lire la faq avant de poster cette fois

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/07/2009, 18h53
  2. [URL Rewriting] Comportement bizarre
    Par gwenhael dans le forum Apache
    Réponses: 9
    Dernier message: 15/02/2008, 19h02
  3. [URL Rewriting] Réécriture d'URL comportant %25
    Par djanke dans le forum Apache
    Réponses: 5
    Dernier message: 19/12/2007, 12h24
  4. [URL Rewriting] problème de rewrite rule
    Par julien.63 dans le forum Apache
    Réponses: 1
    Dernier message: 30/10/2007, 13h38
  5. [PHP-JS] Comportement des urls
    Par Dark_Yoshi dans le forum Langage
    Réponses: 2
    Dernier message: 20/09/2007, 18h54

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