2013-03-07 7 views
13

@RequestScoped और @SessionScopedBeanकामयाब सेम सर्वलेट कंटेनर से ही प्रबंधित कर रहे हैं, क्योंकि वे मूल रूप से क्रमश: HttpRequest और HttpSession की एक विशेषता के रूप में जमा कर रहे हैं के जीवन चक्र। जेएसएफ @ViewScopedBean के जीवन चक्र का प्रबंधन कैसे करता है? मुझे पता है कि दृश्य बनने पर यह बनाया जाता है और जब तक किसी भिन्न दृश्य में कोई पोस्टबैक नहीं होता तब तक उपयोग योग्य होता है। लेकिन मुझे पता चला कि उस दृश्य से आगे बढ़ने के तुरंत बाद कचरा इकट्ठा नहीं किया गया है।जेएसएफ में @ViewScoped बीन कैसे और कब नष्ट हो गया है?

+0

एक बार प्रबंधित बीन एक्शन विधि एक वैध नेविगेशन केस परिणाम देता है, भले ही यह एक ही दृश्य के लिए हो, दृश्य स्कैन प्रबंधित प्रबंधित बीन को खराब और पुनर्निर्मित किया जाएगा। इसे http://balusc.blogspot.co.il/2011/09/communication-in-jsf-20.html पढ़ें और यह वह जगह है जहां उन्होंने संग्रहीत किया: http://stackoverflow.com/a/9177769/617373 – Daniel

+0

ठीक है, हकीकत में, आप जीसी की भविष्यवाणी करने में सक्षम नहीं होना चाहिए या यह तुरंत आप हैं? लेकिन mojarra में विचारों से भरे बीन्स के बारे में, http://stackoverflow.com/a/13097208/1530938 – kolossus

+0

कचरा संग्रह असीमित है। जब दृश्य क्षेत्र "नष्ट" होता है तो यह वास्तव में बस "अन्य कचरा इकट्ठा होने के लिए तैयार चिह्नित होता है", बस अन्य सभी जावा वस्तुओं की तरह। नोट: अंकन वास्तव में 0 की संदर्भ संख्या है (यानी चिह्नित "अब उपयोग नहीं किया गया")। – DwB

उत्तर

23

जब

  • गैर null परिणाम के साथ एक पोस्टबैक प्रदर्शन किया गया है यह नष्ट हो जाएगा,

  • या, (तार्किक) सत्र में देखे जाने की संख्या पार कर गया है और विशेष रूप से दृश्य एलआरयू श्रृंखला में पहला (मोजररा में, यह com.sun.faces.numberOfViewsInSession और com.sun.faces.numberOfLogicalViews संदर्भ पैरामीटर, प्रत्येक के डिफ़ॉल्ट मान 15 के साथ कॉन्फ़िगर करने योग्य है),

  • या, एनयू सत्र में एक्टिव व्यू स्कोप्स का एमबर पार हो गया है (मोजररा में, यह 25 की हार्डकोडेड सीमा है), JSF 2.2 Memory Consumption: Why does Mojarra keep the ViewScoped Beans of the last 25 Views in Memory?

  • या सत्र समाप्त हो गया है।

यह इस प्रकार जब पेज, एक पृष्ठ पर एक GET लिंक पर क्लिक या पृष्ठ को ताज़ा करने के लिए, या ब्राउज़र टैब/विंडो को बंद करने के परिणाम के रूप में उतार दिया जाता है को नष्ट कर दिया नहीं किया जाएगा। बीन तब तक जीवित रहेगा जब तक कि अबाधित स्थितियों में से एक पूरी नहीं हो जाती। वैसे भी अनलोड के दौरान इसे नष्ट करने के लिए, इसके बजाय OmniFaces @ViewScoped का उपयोग करने पर विचार करें।

+0

एलआरयू द्वारा आपका क्या मतलब है? हाल ही में इस्तेमाल किया गया? और * तार्किक * विचारों से आपका क्या मतलब है? – Geek

+2

1) हां। वे एक एलआरयू मानचित्र में संग्रहीत हैं, जो अंतिम उपयोग द्वारा आदेश दिया गया है। कम से कम हाल ही में पहली प्रविष्टि का उपयोग किया जाता है। 2) http://stackoverflow.com/questions/12562469/how-can-i-set-the-view-timeout/12564632#12564632 – BalusC

+0

@ बाल्लूसी देखें, क्या स्थायी दृश्यों वाले बीन्स तेजी से कोई समाधान हैं? उस के साथ एनोटेशन मदद रद्द कर देगा? –

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