[JSF] chargement incomplet suite à redirection dans un PhaseListener

chargement incomplet suite à redirection dans un PhaseListener [JSF] - Java - Programmation

Marsh Posté le 09-03-2009 à 17:57:01    

Bonjour,
 
j'ai un petit soucis sur une appli web qui tourne sur tomcat 5.5 et qui utilise JSF 1.1 + Tomahawk.
J'utilise un PhaseLister pour déterminer si l'utilisateur est loggé ou pas.
S'il est loggé : j'envoie un "loginSucess" dans le NavigationHandler
Sinon : j'envoie un "logout" qui invalide totalement la session et redirige vers la page de login.
 

Code :
  1. public void afterPhase(PhaseEvent event) {
  2. FacesContext fc = event.getFacesContext();
  3. HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
  4. // Check to see if they are on the login page.
  5. boolean loginPage = fc.getViewRoot().getViewId().lastIndexOf("login" ) > -1 ? true : false;
  6. ContextBacker ctx=(ContextBacker) fc.getApplication().getVariableResolver().resolveVariable(fc, "contextBacker" );
  7. boolean loggedIn = "loginSuccess".equals(ctx.authenticate()) ? true : false;
  8. if (!loginPage && !loggedIn) {
  9.  NavigationHandler nh = fc.getApplication().getNavigationHandler();
  10.  //SessionUtil.getSession().invalidate();
  11.  nh.handleNavigation(fc, null, "logout" );
  12. } else if (loginPage && loggedIn) {
  13.  NavigationHandler nh = fc.getApplication().getNavigationHandler();
  14.  //SessionUtil.getSession().invalidate();
  15.  nh.handleNavigation(fc, null, "loginSuccess" );
  16. }
  17. }


 
ça fonctionne presque...Mais le problème, c'est que si je dispose d'une session active (avec le LoginBean présent dans le contexte), que j'ouvre un nouvel onglet, et que je saisis l'url de la racine de mon application dans le browser, la page souhaitée s'affiche bien, mais le menu ne s'affiche pas...
Alors que si je saisis l'url complète de la page, le menu se charge bien.
 
Vous auriez une idée, parce que là, je ne vois pas...
 
Merci d'avance.
 
edit : 'tain de touche tab :o
 
edit_2 : le menu est un jscookMenu, du framework Tomahawk


Message édité par lezioul le 09-03-2009 à 18:01:07
Reply

Marsh Posté le 09-03-2009 à 17:57:01   

Reply

Marsh Posté le 09-03-2009 à 18:21:10    

Bon, désolé pour le dérangement, avec un ptit coup de "redirect", ça fonctionne...
 

Code :
  1. public void afterPhase(PhaseEvent event) {
  2. FacesContext fc = event.getFacesContext();
  3. // Check to see if they are on the login page.
  4. boolean loginPage = fc.getViewRoot().getViewId().lastIndexOf("login" ) > -1 ? true : false;
  5. ContextBacker ctx=(ContextBacker) fc.getApplication().getVariableResolver().resolveVariable(fc, "contextBacker" );
  6. boolean loggedIn = "loginSuccess".equals(ctx.authenticate()) ? true : false;
  7. if (!loginPage && !loggedIn) {
  8.  NavigationHandler nh = fc.getApplication().getNavigationHandler();
  9.  //SessionUtil.getSession().invalidate();
  10.  nh.handleNavigation(fc, null, "logout" );
  11. } else if (loginPage && loggedIn) {
  12.  try {
  13.   fc.getCurrentInstance().getExternalContext().redirect("start.jsf" );
  14.  } catch (Exception e) {
  15.   e.printStackTrace();
  16.  }
  17. }
  18. }


 
Par contre, si quelqu'un peut m'expliquer pourquoi l'utilisation du NavigationHandler foire (pour ma culture perso, hein), ça serait très sympa.
 
Merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed