2011-10-04 19 views
7

estoy creando contenedor HttpSession esta manera:HttpSession - cómo obtener la 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()); 

Y tengo que debería SessionListener me da información sobre la sesión creada:

@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()); 
    ... 
    } 
} 

¿Cómo puedo obtener el atributo username?

Si estoy tratando de que el uso de System.out.println("User name: " + session.getAttribute("username")) se lanza java.lang.NullPointerException ..

+0

modo de sesión o System.out es nulo –

+0

Usando la API Servlet cruda por dentro código JSF está en casi todos los casos un olor código. En este caso particular, ¿por qué no solo usa un bean administrado con ámbito de sesión? – BalusC

+0

No entiendo la pregunta ...? La primera parte del código con 'FacesContext' está en bean gestionado con ámbito de sesión. Voy a editar mi publicación ... ¿Podrías decirme más? – gaffcz

Respuesta

10

La interfaz HttpSessionListener se utiliza para monitorizar cuando se crean y se destruyen en el servidor de aplicaciones sesiones. El HttpSessionEvent.getSession() le devuelve una sesión que se acaba de crear o destruir (dependiendo de si se llama por sessionCreated/sessionDestroyed, respectivamente).

Si desea una sesión existente, tendrá que obtener la sesión de la solicitud.

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

Gracias, caballero, tienes razón y la sesión de solicitud me ayudó también :-) – gaffcz

+0

es solo como php, pero por alguna razón puedo superar esto: SI tengo este código como este y, sin embargo, no funciona. java.lang.NullPointerException \t en org.apache.jsp.index_jsp._jspService (index_jsp.java:108) \t en org.apache.jasper.runtime.HttpJspBase.service (HttpJspBase.java:70) HttpSession hs = solicitud .getSession (verdadero); long idUser = (largo) hs.getAttribute ("userid"); –

1

El session.getAttribute("key") devolver un valor de java.lang.Object tipo si no se encuentra determinada clave. De lo contrario, devuelve null.

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

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

¡Gracias! No es nulo ahora, pero devuelve algo así como 'session.UserManager @ 1a4f43e'. ¿Es posible decodificar el objeto para poder usarlo como 'if (userName.equeals (" admin ")) {}' ?? – gaffcz

+1

@gaffcz - ¿Estás seguro de que configuras el valor de tipo "Cadena" en la tecla "nombre de usuario"? ¿Cuál es el tipo de devolución del método user.getName()? – adatapost

+0

Lo siento, olvidé otra depuración en la siguiente clase :-) Funciona – gaffcz

Cuestiones relacionadas