2011-05-17 8 views
8

Ho conservato id utente nella sessione utilizzando seguente comando in Servlet:Accesso agli attributi di sessione e conversione in int?

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

Ora, voglio accedere l'utente id da un altro 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) 

Domanda:

  1. Come posso trasmettere a int e inviare l'ID a DAO per l'istruzione SELECT
+0

sto ottenendo seguente eccezione: java.lang.ClassCastException: app.models.User non può essere lanciato a java.lang.Integer –

+0

Ho usato questo userid Integer = (Sessione intera).getAttribute ("user"); –

+0

@a k qual è il tipo di ritorno di 'user.getId()'? –

risposta

13

Anche se si è salvato un int, il metodo prevede un oggetto, pertanto lo int diventerà Integer a causa del box automatico. Provate a lanciare di nuovo a Integer e dovrebbe andare bene:

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

Tuttavia, se l'attributo è nullo si ottiene un NullPointerException qui, quindi forse è meglio andare con Integer fino in fondo:

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

Dopo questo, è possibile verificare in modo sicuro se userid è null.


EDIT: In risposta ai vostri commenti, ecco cosa intendo per "verificare la presenza di null".

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

Ricevo anche NullPointerException dopo la seconda istruzione. –

+0

Dopo? Vuoi dire che hai assegnato l'ID utente intero e poi? Lo controlli per null? Se no e provate a chiamare qualcosa su di esso o provate ad assegnarlo ad alcuni 'int' o passatelo ad un metodo che si aspetta' int', l'NPE è naturale. Ma la linea in sé non può davvero lanciare un NPE. Se l'ID utente è nullo dopo averlo letto dalla sessione, significa che nessuno lo ha ancora archiviato lì. –

+0

Lo sto passando in UserDAO userDAO = new UserDAO(); e userDAO.getUser (userid); –

1

Io non sono bravo a Java, ma ho usato per farlo come
Integer.parseInt(session.getAttribute("user").toString())

Prova una volta, ma basta essere sicuri di check null per session.getAttribute("user") prima di chiamare toString

+0

C'è un 'Integer' salvato come attributo di sessione. La conversione in 'String' e l'analisi in un' int'/'Integer' non ti dà molto, vero? –

+0

Non sono sicuro di come funzioni la conversione di 'Object to int'. Se Object è 'convertito in numero intero 'e quindi viene usato' intValue() ', i risultati potrebbero essere buoni. Come già detto, non sono bravo in JAVA. – Mayank

+0

In C++ sicuramente non funzionerà, perché 'Object class' non sarà della stessa dimensione nello stack come' int' – Mayank

1

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

+0

get java.lang.NullPointerException –

+0

@a k Non sai perché è null ma puoi fare 'int userid = session.getAttribute (" utente ") == null? (Intero) session.getAttribute ("utente"): 0; 'dove' 0' sarebbe il valore predefinito se sesson restituisce null. ma devi ancora capire perché è nullo se non si suppone che sia nullo. –

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

Java ha la classe di wrapper Integer, è possibile memorizzare il valore int in un oggetto di Integer

0

ho usato questo:

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

Perché '' String ''come' getAttribute() 'arg? Dovrebbe essere'' user ''invece. –

0

provare questo

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

provare questo, ha funzionato per me: HttpSession session = request.getSession(); if (session.getAttribute("user") != null) { userid = ((Integer) session.getAttribute("user")).intValue(); } else { userid = 0; }

-1

provare questo codice:

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

Moltiplicando due stringhe di sessione:

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