2016-04-07 9 views
0

Hallo, ich arbeite mit JSF2 und habe Probleme mit der Sitzung. Mein Problem ist, dass ich mich anmelde und der Benutzername erscheint wie seine geloggte, aber wenn ich zu einer anderen Seite navigiere, erscheint der Name nicht mehr. Dies begann, wenn ich die Abmeldeoption aktiviere. Ich habe die Anmelde- und Abmeldeverfahren im selben Controller. Und der Text, in dem der Name der Benutzer- und Abmelde-Schaltfläche angezeigt wird, ist eine Facelet-Vorlage, weil ich wollte, dass sie auf allen Seiten mit dieser Vorlage angezeigt wird.JSF- ich logge mich ein und logge automatisch, wenn ich durch es navigiere

Dies ist der Code für die Anmeldung und die Abmeldung:

public String login(){ 
    try { 
     user = ejb.Autenticar(this.mail, this.pass); 

     if(user != null){ 
      ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext(); 
      Map<String, Object> sessionMap = externalContext.getSessionMap(); 
      sessionMap.put("USER", user); 

      return "LoginOK"; 
     } 

    } catch (Exception e) { 
     return null; 
    } 
    return null; 
} 

public String logout(){ 
    FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); 
    return "LoginView"; 
} 

Dies ist der Code der Facelet Vorlage (Der Benutzername und das Logout-Button in der divSessionUser sind):

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets" 
    xmlns:h="http://xmlns.jcp.org/jsf/html" 
    xmlns:p="http://primefaces.org/ui"> 

<h:head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <h:outputStylesheet name="./css/default.css"/> 
    <h:outputStylesheet name="./css/cssLayout.css"/> 
    <title>Facelets Template</title> 
</h:head> 

<h:body> 

    <div id="divSessionUser"> 
     <span> 
      <b>Session user: </b> 
      <p:outputLabel value="#{loginControlador.user.name}"/> 
     </span> 
     <p:button value="Logout" outcome="#{loginControlador.logout()}"/> 
    </div> 

    <div id="top" class="top"> 
     <h:graphicImage library="images" name="header1.png" styleClass="topImage"></h:graphicImage> 
    </div> 
    <div> 
     <div id="left"> 
      <ul> 
       <li> <h:link outcome="indexView" value="Home" /></li> 
       <li> <h:link outcome="registroCView" value="Register Comunity" /></li> 
       <li> <h:link outcome="LoginView" value="Login" /></li> 
       <li> <h:link outcome="registroUserView" value="Register User" /></li> 
      </ul> 
     </div> 
     <div id="content" class="left_content"> 
      <ui:insert name="content">Content</ui:insert> 
     </div> 
    </div> 
</h:body> 

Antwort

0

Ich weiß nicht, ob dies der richtige Weg ist, aber es wurde gelöst, indem Sie den div = divSessionUser der Facelet-Vorlage in ein Formular einfügen und die Schaltfläche für den Befehl ändern Taste.

Hoffe es hilft jedem, und wenn jemand eine bessere Antwort haben, bitte sagen Sie uns !!! Danke!

+0

Ich würde empfehlen, dass Sie die p: -Schaltfläche zu einem p: commandButton ändern und das Ergebnis in action ändern. Wenn es dann für dich geklappt hat, ist das großartig! – ArnoldKem

Verwandte Themen