2011-10-04 13 views
7

मैं HttpSession कंटेनर बना रहा हूँ इस तरह से:HttpSession - 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()); 

और मैं SessionListener जो चाहिए मुझे बनाया सत्र के बारे में जानकारी देता है:

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

मैं username विशेषता कैसे मिल सकता है?

अगर मैं System.out.println("User name: " + session.getAttribute("username")) .. फेंक देता है java.lang.NullPointerException का उपयोग कर इसे कोशिश कर रहा हूँ

+0

तो सत्र या System.out है लगभग सभी मामलों में एक कोड गंध JSF कोड के अंदर कच्चे सर्वलेट API का उपयोग कर में अशक्त –

+0

है। इस विशेष मामले में, आप केवल सत्र स्कोप्ड प्रबंधित बीन का उपयोग क्यों नहीं करते? – BalusC

+0

मुझे सवाल समझ में नहीं आता ...? 'FacesContext' के साथ कोड का पहला भाग सत्र स्कोप्ड प्रबंधित बीन में है। मैं अपनी पोस्ट संपादित कर रहा हूं .. क्या आप मुझे और बता सकते हैं? – gaffcz

उत्तर

10

HttpSessionListener इंटरफ़ेस जब सत्र बनाया है और आवेदन सर्वर पर नष्ट कर रहे हैं की निगरानी के लिए प्रयोग किया जाता है। HttpSessionEvent.getSession() आपको एक सत्र देता है जो नव निर्मित या नष्ट हो जाता है (निर्भर करता है कि इसे sessionCreated/sessionDestroyed क्रमशः कहा जाता है)।

यदि आप मौजूदा सत्र चाहते हैं, तो आपको अनुरोध से सत्र प्राप्त करना होगा।

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

धन्यवाद सज्जनो, आप सही हैं और अनुरोध से प्राप्त सत्र ने मुझे भी मदद की :-) – gaffcz

+0

यह सिर्फ php की तरह, लेकिन किसी कारण से मैं इसे प्राप्त कर सकता हूं: एसआई को बस यह मेरा कोड पसंद है, और अभी तक काम नहीं कर रहा है। java.lang.NullPointerException \t org.apache.jsp.index_jsp._jspService पर (index_jsp.java:108) org.apache.jasper.runtime.HttpJspBase.service पर \t (HttpJspBase.java:70) HttpSession hs = अनुरोध .getSession (सही); लंबे idUser = (लंबा) hs.getAttribute ("userid"); –

1

session.getAttribute("key")java.lang.Object प्रकार का मान प्रदान करता है, तो किसी कुंजी पाया जाता है। यह अन्यथा शून्य वापस आता है।

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

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

धन्यवाद! यह अभी शून्य नहीं है, लेकिन यह 'session.UserManager @ 1a4f43e' जैसा कुछ देता है। क्या ऑब्जेक्ट को डीकोड करना संभव है जैसे कि 'if (userName.equeals ("admin")) {} '?? – gaffcz

+1

@gaffcz - क्या आप वाकई "स्ट्रिंग" प्रकार मान को "उपयोगकर्ता नाम" कुंजी पर सेट करते हैं? User.getName() विधि का रिटर्न प्रकार क्या है? – adatapost

+0

मुझे खेद है, मैं अगली कक्षा में एक और डीबग भूल गया :-) यह – gaffcz

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^