2010-06-21 13 views
13

कुछ बता सकते हैं कि इसका कोई भी उद्देश्य क्या नहीं है और इसका उद्देश्य क्या है?कोई भी स्कोप बीन नहीं है और इसका उपयोग कब किया जाए?

मान लीजिए अगर मैं

request scope as r1 

session scope as s1 

application scope a1 

में एक सेम है और कहते हैं कि मैं तो ऊपर कार्यक्षेत्रों से प्रत्येक के लिए में इंजेक्षन कोई गुंजाइश सेम n1 मैं कि n1 हर माता-पिता की फलियों जब कभी अपनी मूल सेम [के लिए instantiated हो जाता है लगता है आर 1/एस 1/ए 1] तत्काल है।

ए 1 में कोई भी स्कोप बीन ए 1 में उपलब्ध नहीं है क्योंकि ए 1 सेब का दायरा है। एस 1 में कोई भी स्कोप बीन केवल तब तक उपलब्ध नहीं है जब तक कि s1 नष्ट नहीं होता है और जब s1 बनाया जाता है फिर n1 को तत्काल और इसके लिए उपलब्ध कराया जाता है।

क्या यह सही है?

और इसका उपयोग करने का उद्देश्य क्या है? केवल इस तरह के बीन बनाने से बचने के लिए?

बहुत धन्यवाद

+0

आपने "कोई गुंजाइश" के बारे में कहां पढ़ा? – Bozho

उत्तर

19

none के <managed-bean-scope> या एक @NoneScoped एनोटेशन के साथ एक सेम हर एक ईएल अभिव्यक्ति की फलियों को संदर्भित पर बनाया जाएगा। यह कहीं भी जेएसएफ द्वारा संग्रहीत नहीं किया गया है। यदि आवश्यक हो, तो कॉलर को मूल्यांकन संदर्भ स्वयं ही स्टोर करना होगा।

उदा। दृश्य

<p>#{noneScopedBean.someProperty}</p> 
<p>#{noneScopedBean.someProperty}</p> 
<p>#{noneScopedBean.someProperty}</p> 

एक कोई-दायरे वाले सेम पर में निम्नलिखित एक अनुरोध के दौरान सेम 3 (तीन) बार का निर्माण करेगी। बीन की हर पहुंच एक पूरी तरह से अलग बीन देता है जिसे संपत्ति के उपयोग के तुरंत बाद कचरा दिया जाता है।

हालांकि, उदाहरण के लिए में निम्नलिखित एक सत्र सेम

@ManagedProperty("#{noneScopedBean}") 
private NoneScopedBean noneScopedBean; 

scoped यह रूप में लंबे समय के रूप में सत्र सेम उदाहरण scoped रहने के लिए कर देगा। आपको केवल यह सुनिश्चित करना चाहिए कि आप इसे दृश्य में #{sessionScopedBean.noneScopedBean.someProperty} द्वारा देख सकें।

तो यह उपयोगी हो सकता है जब आप एक मनमानी बीन में प्रबंधित संपत्ति के रूप में स्कोप-कम डेटा उपलब्ध करना चाहते हैं।

+1

मुझे आपके द्वारा उल्लिखित लाभ नहीं मिला ... क्या आप कृपया थोड़ा विस्तार कर सकते हैं ... – Inv3r53

+0

@deadlus: संयोग से, मैंने जवाब पोस्ट करने के बाद बस कुछ हद तक खेलना शुरू कर दिया। क्षमा करें, यह काम नहीं करता जैसा मैंने उम्मीद की थी और मुझे अब कोई लाभ नहीं दिख रहा है। – BalusC

+0

@ बालससी "यह दायरा उपयोगी हो सकता है जब आप चेहरे-config.xml में प्रबंधित गुणों को परिभाषित करना और घोषित करना चाहते हैं, सीधे माता-पिता बीन में ही।" माता-पिता बीन एनोटेशन के बावजूद एक प्रबंधित संपत्ति के दायरे की घोषणा करने की अनुमति नहीं देता है? – Geek

7

मैं @nonescoped का उपयोग कर रहा हूं जब मेरा "दृश्य तर्क" किसी भी दायरे में होने की आवश्यकता नहीं है लेकिन किसी अन्य प्रबंधित बीन द्वारा संदर्भित किया जाना चाहिए।

मैं लिफ़ेरे के साथ काम कर रहा हूं, क्योंकि मैं अपनी वास्तुकला और डिजाइन को जीवनभर से स्वतंत्र बनाना चाहता हूं, मैं अपनी सेवाएं इंटरफेस और डीटीओ बनाता हूं, लेकिन जब आपको डेटा को दृढ़ता से रखने की आवश्यकता होती है, तो लिफ़ेरे को यह चाहिए कि कंपनी आईडी और कंपनी समूह से भेजा जाए दृश्य परत (इस मामले में जेएसएफ)।

स्वतंत्रता बनाए रखने के लिए, मैंने एक "एडाप्टर पैटर्न" बनाया है जो एक लिनफेयर से स्वतंत्र इंटरफ़ेस के साथ @noneScope के साथ एक सर्विसलेयर प्रबंधित बीन बना रहा है। इस तरह मैं कंपनी आईडी और कंपनी ग्रुपआईडी को लिफ़ेरी एपिस द्वारा प्राप्त कर सकता हूं।

@noneScope का उपयोग करने का लाभ यह है कि आप इसे किसी भी क्षेत्र के किसी भी बीन में @ManagedProperty के रूप में उपयोग कर सकते हैं।

0

@NoneScoped निम्नलिखित परिदृश्य में फायदेमंद होगा।

मान लें कि हमें दो अलग-अलग स्कॉप्ड बीन्स में एक ही बीन इंजेक्ट करना है, हम उस बीन को @NoneScoped के रूप में चिह्नित कर सकते हैं। @NoneScoped के साथ एक बीन बीनऑन कहें, किसी भी बीन में आसानी से इंजेक्शन किया जा सकता है जैसे @Request या @ सत्र।

बीनऑन के लिए @NoneScoped का उपयोग किए बिना, हमें अलग-अलग क्षेत्रों के साथ बीन को डुप्लिकेट करना पड़ सकता है और तदनुसार उन्हें इंजेक्ट करना पड़ सकता है।

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