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 :
<h:commandButton id="register" value="Register" action="#{register.register}"/>
1.b) pages.xml
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 :
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
<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
1 2 3
| <h:commandButton id="identification"
value="M'identifier"
action="#{identification.identifier}"/> |
2.b) identification.page.xml
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
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
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 ?
Partager