2013-01-06 25 views
6

मैं इस तरह के एक JSF बीन्स संरचना है:एक दृश्यस्पेड बीन के अंदर सत्रस्कोप का प्रबंधित प्रॉपर्टी - क्षणिक?

@ManagedBean 
@ViewScoped 
public class ViewBeany implements Serializable { 

.... 
    @ManagedProperty(value='#{sessionBeany}) 
    transient private SessionBeany sessionBeany; 
... 

    public getSessionBeany() { ... }; 
    public setSessionBeany(SessionBeany sessionBeany) { ... }; 

} 

transient के लिए कारण यह है कि सत्र सेम कुछ गैर Serializable सदस्य हैं और Serializable नहीं बनाया जा सकता है।

क्या यह काम करेगा?
यदि नहीं, तो मैं SesionBeany को क्रमबद्ध करने में सक्षम नहीं होने की समस्या को कैसे हल कर सकता हूं, लेकिन इसे एक दृश्यमान संपत्ति के रूप में एक स्टेप्ड बीन के तहत रखने के लिए?

धन्यवाद!

+0

तुम इतनी विवश नहीं कर रहे हैं, तो आप भी सिर्फ 'server' करने के लिए अपने' STATE_SAVING_MODE' सेट और – kolossus

उत्तर

12

यह काम नहीं करेगा। यदि दृश्य स्कैन बीन धारावाहिक है, तो सभी transient फ़ील्ड छोड़ दिए जाते हैं। जेएसएफ deserialization के बाद प्रबंधित गुणों को पुन: प्रक्षेपित नहीं करता है, तो आप सत्र स्कोप्ड बीन संपत्ति के बिना एक दृश्य स्कोप्ड बीन के साथ समाप्त होता है जो केवल एनपीई का कारण बनता है।

इस विशेष निर्माण में, आपकी सबसे अच्छी शर्त गेटटर में आलसी लोडिंग पेश करना है और सीधे क्षेत्र पहुंच के बजाय गेटर द्वारा सत्र बीन प्राप्त करना है।

private transient SessionBeany sessionBeany; 

public SessionBeany getSessionBeany() { // Method can be private. 
    if (sessionBeany == null) { 
     FacesContext context = FacesContext.getCurrentInstance(); 
     sessionBeany = context.getApplication().evaluateExpressionGet(context, "#{sessionBeany}", SessionBeany.class); 
    } 

    return sessionBeany; 
} 
+0

धन्यवाद पूरी तरह ग्राहक के लिए अपने दृष्टिकोण को क्रमानुसार करने होने से बचने के सकता है। मुझे आश्चर्य है कि जेएसएफ के पास इस समस्या के लिए 'सुव्यवस्थित' समाधान नहीं है क्योंकि मुझे लगता है कि यह दुर्लभ नहीं है। – Ben

+2

मुझे पहले से ही आश्चर्य हुआ कि क्या यह एक राज्यव्यापी ईजेबी नहीं होना चाहिए था। ईजेबी को धारावाहिक प्रॉक्सी के रूप में इंजेक्शन दिया जाता है, इसलिए आपको सीरियलाइजेशन के बारे में चिंता करने की आवश्यकता नहीं होगी। – BalusC