2011-03-28 10 views
5

मैं स्कोप्ड देखने के लिए जेएसएफ प्रबंधित बीन सत्र को कन्वर्ट करने की कोशिश कर रहा हूं। हालांकि, जब मैं इस सेम के लिए एक्सएचटीएमएल पृष्ठ पर पहुँचने का प्रयास करते हैं, तो मैं निम्नलिखित त्रुटि मिलती है:जेएसएफ 2 (मोज़रा) देखें स्कोप प्रबंधित बीन चाहता है कि सभी सदस्य Serializable

java.io.NotSerializableException: foo.bar.SomeDaoClass

मैं एक सहायक डीएओ के एक सदस्य है कि मैं बीन के भीतर दृढ़ता से जुड़े कार्यों को प्रतिनिधि करने के लिए उपयोग करें। यदि मैं इस डीएओ कक्षा को सीरियलज़ेबल लागू करता हूं तो अन्य यूआईसीओम्पोनेंट संदर्भों में एक ही त्रुटि उत्पन्न होती है!

मुख्य उपयोग केस यह है कि मेरे पास एक क्लिक है जिस पर मैं एक jquery लाइटबॉक्स पॉप-अप खोलता हूं जो xhtml पेज दिखाता है जिसे सत्र बीन द्वारा समर्थित किया जाता है। जब उपयोगकर्ता पॉप-अप फॉर्म पर सबमिट बटन पर क्लिक करता है, तो मैं सत्र बीन प्रोग्रामेटिक रूप से हटा देता हूं। समस्या यह है कि यदि उपयोगकर्ता पॉप-अप के बंद बटन पर क्लिक करता है, और किसी अन्य आईडी पर इंगित करने वाले किसी अन्य लिंक पर क्लिक करता है, तो वही मान दिखाए जाते हैं (सत्र स्कॉप्ड होने पर)!

मैं इस फॉर्म को पॉप-अप में देखते हुए मूल्यों को संरक्षित करने के लिए दृश्य स्कोप का उपयोग करना चाहता हूं और जब उपयोगकर्ता पॉप-अप के बंद बटन पर क्लिक करता है, तो मानों को त्याग दिया जा सकता है।

उत्तर

5

मुझे आशा है कि आप पहले से ही इस समस्या का समाधान है, लेकिन यहां लैंडिंग अन्य लोगों के लिए, जो सत्र स्कोप का उपयोग नहीं करना चाहते हैं और वैकल्पिक रूप से व्यू स्कोप का उपयोग करते हैं, जो आपको serializable कार्यान्वयन का उपयोग करने के लिए मजबूर करते हैं, आप उन गुणों के बगल में transient कीवर्ड का उपयोग कर सकते हैं जिन्हें आप serializable नहीं बनाना चाहते हैं, यदि आप एक सेवा या दाओ फोन करना चाहते हैं तो यह बहुत उपयोगी होगा।

उदाहरण:

@ManagedBean(name="addressTableBeanExample4") 
@ViewScoped 
public class ExampleBean4 implements Serializable { 

    private static final long serialVersionUID = 1L; 

    // non serialazable class 
    private transient List<Customer> data = new ArrayList<Customer>(); 

    private Customer selected; 
} 
संबंधित मुद्दे