2012-10-24 7 views
7

में सत्र विशेषता का उपयोग कैसे कर सकता हूं मैंने जेएसएफ और प्राइमफेस का उपयोग करके एक लॉगिन फॉर्म लागू किया है। मैंने प्राइमफेस शोकेस वेबसाइट में this example का उपयोग किया।मैं फेसलेट पेज

मेरे पास डेटाटेबल दिखाने के लिए एक फेसलेट पृष्ठ है। अब मुझे इस तालिका पृष्ठ के साथ उपरोक्त लॉगिन फॉर्म को एकीकृत करने की आवश्यकता है। इसलिए मैंने सत्र विशेषता को संभालने के लिए LoginBean.java में कुछ पंक्तियां जोड़ दीं।

 if (username.equals(getUsername_db()) && password.equals(getPassword_db())) {//valid user and paward 
     loggedIn = true; 
     msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Welcome", getUsername_db()); 
     //new lines 
     FacesContext context2 = FacesContext.getCurrentInstance(); 
     HttpSession session = (HttpSession) context2.getExternalContext().getSession(true); 
     session.setAttribute("user", username); 
     //end of new lines 
     ... 

यदि उपयोगकर्ता में लॉग इन नहीं कर रहा है मैं, DataTable से किसी स्तंभ को छिपाने की जरूरत है। अब मेरी समस्या, मैं कैसे सत्र विशेषता मेरी Facelets पृष्ठ के अंदर उपयोग कर सकते हैं कर रहा है?

उत्तर

14

आपने लॉग इन किए गए उपयोगकर्ता को "उपयोगकर्ता" नाम के साथ सत्र विशेषता के रूप में संग्रहीत किया है।

#{user} 

तुम बस अगर यह मौजूद है या नहीं की जाँच करने के ईएल में empty कीवर्ड का उपयोग कर सकते (यानी यह लॉग इन है या नहीं है) और आप उपयोग कर सकते हैं JSF:

तो यह इस प्रकार के रूप में उपलब्ध ईएल में है घटक का rendered यह निर्देश देने के लिए विशेषता है कि HTML आउटपुट उत्पन्न करना है या नहीं।

<p:column rendered="#{not empty user}"> 
    ... 
</p:column> 

एक अच्छे एक सत्र विशेषता ExternalContext#getSessionMap() उपयोग कर रहा है स्टोर करने के लिए जिस तरह से:

<h:panelGroup rendered="#{not empty user}"> 
    <p>Welcome #{user}, you have been logged in!</p> 
</h:panelGroup> 

एक तालिका स्तंभ छुपाने का अपने विशिष्ट मामले में, बस इसे इस रूप में उपयोग करें। इस तरह आपका कोड सुगंधित javax.servlet.* आयात से मुक्त है।

FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("user", username); 

असंबंधित ठोस समस्या है, यही कारण है कि निम्नलिखित की जांच?

if (username.equals(getUsername_db()) && password.equals(getPassword_db())) { 

आप SQL में SELECT ... FROM user WHERE username=? AND password=? क्यों नहीं करते हैं? या आप डीबी पर भरोसा नहीं करते कि यह सही पंक्ति देता है?

+0

धन्यवाद बलुस। लेकिन मुझे उपयोगकर्ता को दृश्य में एक वस्तु के रूप में मिला। इस तरह से कुछ "उपयोगकर्ता @ 1a8b71e" दिखाया। वैसे भी मुझे मेरी समस्या को हल करने के लिए आपके उत्तर से भाग मिला। मैंने सत्र सेटिंग भाग को हटा दिया और सत्रबॉयन क्लास को सत्र स्कोप्ड के रूप में सेट किया। और मैं सीधे अपने पैनल समूह टैग के अंदर मूल्य प्राप्त करने में सक्षम था। SQL सलाह के लिए धन्यवाद। मैंने इसे तैयार बयानों का उपयोग करके बदल दिया। –

+0

स्पष्ट रूप से आपके कोड में दिखाए गए उपयोगकर्ता नाम 'को' स्ट्रिंग 'नहीं है। शायद आपने प्रश्न में कोड को बढ़ाया है? जिस तरह से एसक्यूएल टिप्पणी तैयार बयान के बारे में संकेत देने के लिए नहीं थी। आप उपयोगकर्ता नाम और पासवर्ड की तुलना कर रहे हैं ** दो बार ** (एक बार डीबी में और बाद में जावा में)। इसका कोई अर्थ नहीं निकलता। बस जांचें कि क्या डीबी ने एक रिकॉर्ड लौटाया है या नहीं, यह सब कुछ है। आपको एक बार फिर उपयोगकर्ता नाम/पासवर्ड की तुलना करने की आवश्यकता नहीं है जिसे आपने डीबी से पहले से जांचने और वापस करने के लिए कहा है। – BalusC

+0

समझ गया! लेकिन मेरी आखिरी एसक्यूएल क्वेरी में मैंने केवल क्लॉज के साथ केवल उपयोगकर्ता नाम का उपयोग किया था। जैसे: स्ट्रिंग क्वेरी = "उपयोगकर्ता नाम से उपयोगकर्ता नाम चुनें, उपयोगकर्ता नाम = '" + uname + "';"; तो मैं सिर्फ username.equals (getUsername_db() भाग को हटा सकता हूं। मुझे केवल इस मामले में पासवर्ड जांचने की आवश्यकता है ... आपके सुझाव के लिए धन्यवाद। –

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