2011-05-17 25 views
8

he almacenado id de usuario en la sesión usando los siguientes comandos en el servlet:Acceso a atributos de sesión y conversión a int?

HttpSession session = request.getSession(); 
session.setAttribute("user", user.getId()); 

Ahora, yo quiero tener acceso a ese ID de usuario de otro servlet:

HttpSession session = request.getSession(false); 
int userid = (int) session.getAttribute("user"); // This is not working 

OR 

User user = new User(); 
user.setId(session.getAttribute("user")); This ain't possible (Object != int) 

Pregunta:

  1. ¿Cómo puedo convertir a int y enviar el ID a DAO para la instrucción SELECT?
+0

estoy consiguiendo siguiente excepción: java.lang.ClassCastException: app.models.User no se puede convertir a java.lang.Integer –

+0

He utilizado este identificador de usuario Integer = (Entero) sesión.getAttribute ("usuario"); –

+0

@a k ¿cuál es el tipo de devolución de 'user.getId()'? –

Respuesta

13

Incluso si guardó un int, ese método espera un Objeto para que su int se convierta en un Integer debido al auto-boxeo. Intenta convertir de nuevo a Integer y que debería estar bien:

int userid = (Integer) session.getAttribute("user"); 

Sin embargo, si el atributo es nulo obtendrá un NullPointerException aquí, así que quizás es mejor ir con Integer todo el camino:

Integer userid = (Integer) session.getAttribute("user"); 

Después de esto, puede verificar con seguridad si userid es null.


EDITAR

: En respuesta a sus comentarios, esto es lo que quiero decir con "comprobar nula".

Integer userid = (Integer) session.getAttribute("user"); 
User user = null; 
if (userid != null) { 
    user = new UserDAO().getUser(userid); 
} 
// here user will be null if no userid has been stored on the session, 
// and it wil be loaded from your persistence layer otherwise. 
+0

Estoy recibiendo NullPointerException después de la segunda declaración también. –

+0

Después de eso? ¿Quiere decir que tiene asignado el 'ID de usuario entero 'y luego qué? ¿Lo compruebas por nulo? Si no es así, e intentas invocar algo sobre él o si intentas asignarlo a algún 'int' o pasarlo a algún método esperando' int', el NPE es natural. Pero la línea en sí no puede lanzar un NPE. Si el ID de usuario es nulo después de leerlo de la sesión, significa que nadie lo ha almacenado todavía. –

+0

Lo estoy pasando en UserDAO userDAO = new UserDAO(); y userDAO.getUser (userid); –

1

No soy bueno en JAVA pero solía hacerlo como
Integer.parseInt(session.getAttribute("user").toString())

intentar una vez, pero sólo asegúrese de check null para session.getAttribute("user") antes de llamar toString

+0

Hay un 'Integer' guardado como atributo de sesión. Convertirlo a 'String' y volver a analizarlo en' int'/'Integer' no te lleva demasiado, ¿o sí? –

+0

No estoy seguro de cómo funciona la conversión 'Object to int'. Si Object se 'convierte a Integer' y luego se usa 'intValue()', los resultados pueden ser buenos. Como ya dije, no soy bueno en JAVA. – Mayank

+0

En C++ seguramente no va a funcionar, porque 'Object class' no será del mismo tamaño en la pila que' int' – Mayank

1

Trate int userid = (Integer) session.getAttribute("user");

+0

obteniendo java.lang.NullPointerException –

+0

@a k No estoy seguro de por qué es nulo pero puede hacer 'int userid = session.getAttribute (" user ") == null? (Entero) session.getAttribute ("usuario"): 0; 'donde' 0' sería el valor predeterminado si sesson devuelve null. pero aún necesita averiguar por qué es nulo si se supone que no es nulo. –

1
Integer userid = Integer.parseInt(session.getAttribute("user")); 
2

Java tiene Integer clase de contenedor, puede almacenar el valor int en un objeto de Integer

//setting 
Integer intObj = new Integer(intVal); 
session.setAttribute("key",intObj); 
//fetching 
Integer intObj = (Integer) session.getAttribute("key"); 
0

He utilizado este:

Integer.parseInt(session.getAttribute("String").toString()) 
+0

¿Por qué? '" String "' como 'getAttribute()' arg? En su lugar debe ser '" user "'. –

0

probar esto

int userid = Integer.parseInt(session.getAttribute("user").toString()); 
0

probar esto, que trabajó para mí: HttpSession session = request.getSession(); if (session.getAttribute("user") != null) { userid = ((Integer) session.getAttribute("user")).intValue(); } else { userid = 0; }

-1

probar este código:

int userId=Integer.parseInt((String)session.getAttribute("user")); 
0

Multiplicando dos cadenas de la sesión:

int z = Integer.parseInt((String)session.getAttribute("sintelestis")); 
int y = Integer.parseInt((String)session.getAttribute("_embadon_akinitou")); 
System.out.println("Ο Συνολικός Φόρος είναι: "+ (z*y));