2011-10-04 25 views
7

Sto creando contenitore HttpSession in questo modo:HttpSession - come ottenere session.setAttribute?

@SessionScoped 
@ManagedBean(name="userManager") 
public class UserManager extends Tools 
{ 
    /* [private variables] */ 
    ... 
    public String login() 
    { 
    /* [find user] */ 
    ... 
    FacesContext context = FacesContext.getCurrentInstance(); 
    session = (HttpSession) context.getExternalContext().getSession(true); 
    session.setAttribute("id", user.getID()); 
    session.setAttribute("username", user.getName()); 
    ... 
    System.out.println("Session id: " + session.getId()); 

E devo SessionListener che dovrebbe mi dà informazioni sessione creata:

@WebListener 
public class SessionListener implements HttpSessionListener 
{ 
    @Override 
    public void sessionCreated(HttpSessionEvent event) {  
    HttpSession session = event.getSession(); 
    System.out.println("Session id: " + session.getId()); 
    System.out.println("New session: " + session.isNew()); 
    ... 
    } 
} 

Come posso ottenere l'attributo username?

Se sto cercando utilizzando System.out.println("User name: " + session.getAttribute("username")) getta java.lang.NullPointerException ..

+0

così sessione o System.out è nulla –

+0

Utilizzo API Servlet grezzo all'interno codice JSF è in quasi tutti i casi un codice odore. In questo caso particolare, perché non usi solo un bean gestito con scope di sessione? – BalusC

+0

Non capisco la domanda ...? La prima parte del codice con 'FacesContext' è in bean gestito con scope di sessione. Ho intenzione di modificare il mio post .. Potresti dirmi di più? – gaffcz

risposta

10

L'interfaccia HttpSessionListener viene utilizzato per monitorare quando le sessioni vengono creati e distrutti sul server applicazioni. Lo HttpSessionEvent.getSession() restituisce una sessione che è stata appena creata o distrutta (a seconda che sia chiamata da sessionCreated/sessionDestroyed rispettivamente).

Se si desidera una sessione esistente, è necessario ottenere la sessione dalla richiesta.

HttpSession session = request.getSession(true). 
String username = (String)session.getAttribute("username"); 
+0

Grazie Gentleman, hai ragione e anche la sessione di richiesta mi ha aiutato :-) – gaffcz

+0

è solo come php, ma per qualche motivo riesco a capire: SI ha proprio questo il mio codice, eppure non funziona. java.lang.NullPointerException \t a org.apache.jsp.index_jsp._jspService (index_jsp.java:108) \t a org.apache.jasper.runtime.HttpJspBase.service (HttpJspBase.java:70) HttpSession hs = richiesta .getSession (true); long idUser = (long) hs.getAttribute ("userid"); –

1

Il session.getAttribute("key") restituire un valore di tipo java.lang.Object se viene rilevato determinata chiave. Restituisce nulla in caso contrario.

String userName=(String)session.getAttribute("username"); 

if(userName!=null) 
{ 
    System.out.println("User name: " + userName); 
} 
+0

Grazie! Ora non è nulla, ma restituisce qualcosa come 'session.UserManager @ 1a4f43e'. È possibile decodificare l'oggetto per poterlo usare come 'if (userName.equeals (" admin ")) {}' ?? – gaffcz

+1

@gaffcz - Sei sicuro di aver impostato il valore di tipo "String" sul tasto "username"? Qual è il tipo di ritorno del metodo user.getName()? – adatapost

+0

Mi dispiace, ho dimenticato un altro debug nella prossima lezione :-) Funziona – gaffcz

Problemi correlati