2011-04-05 18 views
19

में कुकीज़ का उपयोग कैसे करें मेरे पास जेएसएफ 1.2 सत्र स्कोप बीन पर एक जेएसएफ फॉर्म है। मेरे पास "रीसेट" बटन है जो सत्र को अमान्य करता है।जेएसएफ

मैंने सत्रों के बीच सत्र संख्या (जेएसएफ सत्र नहीं बल्कि मेरा निजी सत्र संख्या) याद रखने के लिए कुकीज़ का उपयोग करने की कोशिश की लेकिन मैं असफल रहा। मेरा प्रश्न - कुकी को प्रारंभ करने, पुनर्प्राप्त करने और स्टोर करने के लिए सही जगह कहां है (कुछ श्रोता? बीन कन्स्ट्रक्टर?)।

ऐसा करने के लिए सबसे अच्छी विधि की तलाश में है।

धन्यवाद! (जो मामलों की 99.9% में सच है;)

उत्तर

34

आप जब सर्वलेट एपीआई के शीर्ष पर JSF चलाकर ExternalContext#getRequestCookieMap()

Map<String, Object> cookies = externalContext.getRequestCookieMap(); 
// ... 

सभी कुकी प्राप्त कर सकते हैं), मैप मान javax.servlet.http.Cookie को हल करता है।

Cookie cookie = (Cookie) cookies.get(name); 
// ... 

JSF 1.2 है, जो JSF 2.0 शुरू की ExternalContext#addResponseCookie() विधि का अभाव में, आप (बेशक सर्वलेट एपीआई के शीर्ष पर केवल जब चल JSF) ExternalContext#getResponse()HttpServletResponse को कास्ट करने के लिए और फिर HttpServletResponse#addCookie() का उपयोग की जरूरत है।

HttpServletResponse response = (HttpServletResponse) externalContext.getResponse(); 
Cookie cookie = new Cookie(name, value); 
cookie.setMaxAge(maxAge); // Expire time. -1 = by end of current session, 0 = immediately expire it, otherwise just the lifetime in seconds. 
response.addCookie(cookie); 

आप जेएसएफ संदर्भ में कहीं भी ऐसा कर सकते हैं, सही जगह एकमात्र कार्यात्मक आवश्यकता पर निर्भर करती है। आपको केवल यह सुनिश्चित करने की आवश्यकता है कि जब आप प्रतिक्रिया पहले से ही कर चुके हैं तो आप कुकी को नहीं जोड़ते हैं, अन्यथा इसका परिणाम IllegalStateException होगा।

+0

विधि 'addResponseCookie()' पैरामीटर 'स्ट्रिंग नाम, स्ट्रिंग मान, मानचित्र <स्ट्रिंग, ऑब्जेक्ट> गुण' मानकों को स्वीकार करता है। मुझे लगता है कि उदा। 'javax.servlet.http.Cookie' के _maxAge_ गुणों में एन्कोड किए गए हैं। क्या 'कुकी' का उपयोग करने का कोई तरीका है? – Thor

+0

मेरे उत्तर में 'addResponseCookie()' लिंक पर क्लिक करें। यह जावाडोक को इंगित करता है। – BalusC

+0

@ बालससी, क्या मुझे एक विशिष्ट कुकी प्राप्त करने के लिए सभी कुकीज़ मिलनी है, क्या मुझे सीधे एक विशिष्ट कुकी नहीं मिल सकती है? –