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 :

Message pour une autre page


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut Message pour une autre page
    Bonjour,
    J'utilise Seam mais je pense que mon problème est plus généralement lié à l'utilisation de FacesMessages...

    L'appli ne doit être accessible qu'à une liste pré-enregistrée en BDD d'étudiants admis à un concours.

    J'ai une page de login (adaptation de celle générée par New Seam Web Project) et une page d'identification qui permet à l'étudiant jamais connecté de s'identifier afin de prendre connaissance de son login et son mot de passe.

    Comme je n'ai pas encore trouvé de réponse au problème de login automatique, ni eu de réponse à ce sujet dans le forum Seam, j'aimerais dans un premier temps rediriger l'étudiant identifié vers la page de login en affichant dans cette dernière un message lui donnant son login et son mot de passe.
    La redirection se fait bien, la transmission du login se fait bien puisque sa valeur apparaît dans la zone "Nom d'utilisateur" mais le message n'apparaît pas.

    Je me suis inspiré de l'exemple jboss-seam-jpa entre les pages registration et home pour comprendre le mécanisme mais sans succès dans mon appli.

    1) Dans le projet exemple jboss-seam-jpa, il y a ceci :
    1.a) register.xhtml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:commandButton id="register" value="Register" action="#{register.register}"/>
    1.b) pages.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        <page view-id="/register.xhtml">
     
            <action if="#{validation.failed}"
               execute="#{register.invalid}"/>
     
            <navigation>
                <rule if="#{register.registered}">
                    <redirect view-id="/home.xhtml"/>
                </rule>
            </navigation>
     
        </page>
    1.c) RegisterAction.java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
       public void register()
       {
          if ( user.getPassword().equals(verify) )
          {
             List existing = em.createQuery("select u.username from User u where u.username=#{user.username}")
                .getResultList();
             if (existing.size()==0)
             {
                em.persist(user);
                facesMessages.add("Successfully registered as #{user.username}");
                registered = true;
             }
    1.d) home.xhtml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div class="errors"><h:messages id="messages" globalOnly="true"/></div>
    Je comprends donc que le bouton de la page register.xhtml lance l'action register de RegisterAction.java, laquelle en cas de succès ajoute un facesMessages et passe la propriété registered à true. La navigation de la page register.xhtml teste cette propriété et redirige vers la page home.xhtml qui affiche le FacesMessage.

    2) J'ai essayé de faire à peu près la même chose dans mon appli...
    2.a) identification.xhtml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <h:commandButton id="identification" 
                        value="M'identifier"
                        action="#{identification.identifier}"/>
    2.b) identification.page.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        <navigation> <!-- from-action="#{identification.identifier}"> -->
            <rule if="#{identification.admis}">
                <redirect view-id="#{identification.pageSuivante}"/>
            </rule>
        </navigation>
    2.c) Identification.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
                ThEtudiantEtu etudiant = (ThEtudiantEtu) query.getSingleResult();
                //identity.addRole(etudiant.getTeTypeUtilisateurTu().getTuLibelle());
                credentials.setUsername(etudiant.getUtiLogin());
                credentials.setPassword(etudiant.getUtiMotPasse());
                //identity.login();
     
                facesMessages.add("Votre identifiant de connexion est #{etudiant.getUtiLogin()}");
                //facesMessages.add("Votre mot de passe est #{etudiant.getUtiMotPasse()}");
     
                setAdmis(true);
     
                setPageSuivante("/login.xhtml");
                //setPageSuivante("/accueilEtudiant.xhtml");
                return true;
    2.d) login.xhtml n'est qu'une partie de la page, les messages sont dans template.xhtml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
             <h:messages id="messages" globalOnly="true" styleClass="message"
                errorClass="errormsg" infoClass="infomsg" warnClass="warnmsg"
                rendered="#{showGlobalMessages != 'false'}"/>
    J'ai essayé d'ajouter un autre h:message dans login.xhtml mais le message ne s'affiche toujours pas.

    Que me manque t-il ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 55
    Par défaut
    Bonjour,

    Si tu utilise une navigation par redirect, ce dernier vide la queue des messages puisque tu change de page. Au moment de l'appel de la nouvelle page, JSF exécute les phases de son cycle et initialise les messages.
    Deux solutions pour ton problème :
    1°) Soit tu enlève le redirect du faces-config, et tu reste sur la même page.
    2°) Soit tu sauvegarde l'identifiant dans ta session, et tu l'affiche dans la deuxième page.

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par otabbakh Voir le message
    Si tu utilise une navigation par redirect, ce dernier vide la queue des messages puisque tu change de page. Au moment de l'appel de la nouvelle page, JSF exécute les phases de son cycle et initialise les messages.
    Pourtant, dans l'exemple JPA, ça semble fonctionner d'une page à l'autre !

    Deux solutions pour ton problème :
    1°) Soit tu enlève le redirect du faces-config, et tu reste sur la même page.
    redirect n'est pas dans daces-config.xml mais dans [la_page].pages.xml que j'ai compris comme étant des sous ensembles du fichier pages.xml.
    ce n'est pas moi qui l'ai décidé ainsi, c'est la structure générée par Seam.

    En l'occurrence, le but de l'opération est quand même d'afficher une page différente avec des infos provenant du contrôleur de la première page.
    Ou alors, je n'ai pas compris ce que tu veux dire par "rester sur la même page".

    2°) Soit tu sauvegarde l'identifiant dans ta session, et tu l'affiche dans la deuxième page.
    Quel identifiant ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 55
    Par défaut
    Dans JSF, les règles de navigation sont configurées dans le fichier faces-config.xml, mais comme tu utilise le framework jboss-seam, ils se trouvent dans pages.xml.

    Pour la solution N°2, je te parle de l'identifiant de connexion qur tu veux afficher dans la page.
    Au lieu d'envoyer l'identifiant de connexion via le message et de l'intercepter de l'autre coté (facesMessages.add("Votre identifiant de connexion est #{etudiant.getUtiLogin()}"), tu sauvegarde cette information dans la session et tu l'affiche partout dans tes pages.
    Moi je travaille avec un objet que je l'appele Visit(scope session), je crée à l'intérieur une variable identifiantDeConnexion, ensuite je l'appele dans mes pages via le controleur Visit.identifaintDeConnexion.

    J'espère que j'étaie clair, sinon je t'envoie le code si nécessaire.

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    J'approche de la solution.

    Dans la page login.xhtml, j'ai ajouté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <h:outputText id="identificationReussie" 
       rendered="#{not empty credentials.username}" 
       value="Vous êtes autorisé à accéder aux stages Master. Votre identifiant de connexion est #{credentials.username} et votre mot de passe est #{credentials.password}. Veuillez vous connecter pour accéder aux stages Master."/>
    1) Problème : le mot de passe s'affiche chiffré MD5 alors que dans la BDD il est pour le moment en clair.
    Je suppose que cela peut être dû au fait que dans l'entité thUtilisateurUti.java, j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        @UserPassword(hash = "MD5")
        @Column(name = "uti_mot_passe", nullable = false, length = 10)
        @NotNull
        @Length(max = 10)
        public String getUtiMotPasse() {
            return this.utiMotPasse;
        }
     
        public void setUtiMotPasse(String utiMotPasse) {
            this.utiMotPasse = generateMD5(utiMotPasse);
        }
    À terme, j'aurai les password en MD5 dans la BDD. Je sais générer le MD5 à partir du texte en clair tapé par l'utilisateur pour vérifier son existence en BDD mais je ne sais pas le déchiffrer du MD5 en clair.

    2) Amélioration souhaitée : afficher la value sur plusieurs lignes afin de rendre les informations essentielles plus lisibles pour l'utilisateur.
    Comment faire ?

    EDIT :
    1) Je me rends compte que ma question est stupide ; on ne déchiffre pas un MD5 !
    Je vais donc changer de méthode et générer le mot de passe quand l'étudiant s'est identifié avec succès.

    2) J'ai trouvé une méthode pour améliorer l'affichage, en séparant le texte en plusieurs outputText, mais je ne sais pas si c'est la plus optimale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                    <h:outputText id="identificationReussie" 
                        rendered="#{not empty credentials.username}" 
                        value="Vous êtes autorisé à accéder aux stages Master." /><br />
                    <h:outputText value="Votre identifiant de connexion est : #{credentials.username}." 
                        rendered="#{not empty credentials.username}" /><br />
                    <h:outputText value=" Votre mot de passe est : #{credentials.password}."
                        rendered="#{not empty credentials.username}" /><br />
                    <h:outputText value="Veuillez vous connecter pour accéder aux stages Master." 
                        rendered="#{not empty credentials.username}" /><br />
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 55
    Par défaut
    dans le h:outPutText, tu peux mettre escape="false" pour prendre en compte les balises html, ensuite dans ton message tu rajoute des <br/>

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Je viens d'essayer mais Eclipse ne semble pas apprécier ce que j'essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                    <h:outputText id="identificationReussie"
                        escape="false"  
                        rendered="#{not empty credentials.username}" 
                        value="Vous êtes autorisé à accéder aux stages Master. <br />
                            Votre identifiant de connexion est : #{credentials.username}."/><br />
    Eclipse souligne en rouge toute la balise !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 55
    Par défaut
    Eclipse souligne en rouge toute la balise ! [/QUOTE]

    oui parceque eclipse considère que la la fermeture de la balise de outputText n'est pas fermée.
    Ce que je te propose de faire, c'est de mettre ton message dans un fichier .properties (dedans tu copie tout le message avec les balises <br />), ensuite tu l'appelle dans le h:outputText.

Discussions similaires

  1. [MySQL] Fonction header pour ouvrir une autre page
    Par BRUNO71 dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 04/05/2009, 05h34
  2. Réponses: 6
    Dernier message: 09/04/2009, 12h36
  3. Problème pour rediriger sur une autre page html
    Par PatMh77 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 05/05/2008, 07h48
  4. Réponses: 7
    Dernier message: 01/09/2007, 15h27
  5. Réponses: 2
    Dernier message: 17/06/2005, 13h38

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