Seam : Ne pas repasser sur l'écran de login quand on est déjà authentifié

Publié le par stoi

En étudiant le code d'un projet Seam/Richfaces fait par des experts, je suis tombé sur un truc vraiment cool, que je m'empresse de vous livrer ici !

Le projet EDAS 2

Au cours de mon apprentissage de Seam, je suis tombé sur deux articles extrêmement intéressants, que je vous invite très fortement à lire, sur le site JSFCentral : "Speed up your Data-Driven JSF/Seam Application by Two Orders of Magnitude" partie 1 et partie 2

C'est donc naturellement que j'ai téléchargé le source de leur projet EDAS2 (site, sourceforge). On apprend toujours plus en regardant le code d'un expert que des hello world sur la documentation.

Du fun avec pages.xml

C'est en regardant ce projet que j'ai appris qu'on pouvait découper le fichier pages.xml : la racine du fichier pages.xml est la balise <pages> qui contient une série de balises <page>. Par défaut, sans besoin supplémentaire de configuration, on peut créer un fichier nomdemapage.page.xml dont la racine est la balise <page> par page de l'application. Ce qui évite de tout mettre dans un même fichier.

On peut aussi faire N fichier <pages> (typiquement un pour la navigation * et un pour les exceptions) en les déclarant dans le components.xml :
 <navigation:pages> <navigation:resources> <value>/WEB-INF/pages.xml</value> <value>/WEB-INF/exceptions.xml</value> </navigation:resources> </navigation:pages> 


La redirection vers l'acceuil si on est déjà loggé

Dans notre application, on aura pris soin de faire un fichier index.html qui redirige vers notre page de login. Mais comme on a pas envie de se relogger à chaque fois qu'on ouvre un onglet sur le site, les devs de EDAS2 ont trouvé une technique plutôt class (trouvé dans login.page.xml) :
 <action execute="#{identity.isLoggedIn()}" if="#{not empty identity.principal}" /> <navigation from-action="#{identity.isLoggedIn()}"> <rule> <redirect view-id="/accueil.xhtml" /> </rule> </navigation> 
Le code est assez parlant : quand on arrive sur la page, si le composant identity est renseigné on appelle isLoggedIn(). Si dans la page, on appelle isLoggedIn et que le resultat est vrai, alors on redirige sur acceuil.

Pour info, voila comment on fait pour rediriger quand on se log :
 <navigation from-action="#{identity.login()}"> <rule if-outcome="loggedIn"> <redirect view-id="/accueil.xhtml" /> </rule> </navigation> 

Voila, c'est plutôt sympa ce qu'on peut faire avec les pages.xml


tags : Java EE, Seam

Publié dans Java

Commenter cet article