2010-05-07 12 views
5

क्यों कहा जाता है मेरे पास एक जेएसएफ पृष्ठ है जिसमें एक आउटपुट टेक्स्ट है। Outputtext घटक का मान बैकिंग बीन (या प्रबंधित बीन) से कहा जाता है। मुझे पता है कि जब मैं इसे # {MyBean.myString} के रूप में कोड करता हूं तो जेएसएफ इसका नाम बदलता है और getMyString() विधि को कॉल करता है। हालांकि, विचित्र बात यह है कि, जब मैं इस घटक की गेटर विधि को ब्रेकपॉइंट डालता हूं, तो मुझे लगता है कि पेज के दौरान इसे दो बार बुलाया जा रहा है। आउटपुटटेक्स्ट एच में है: फॉर्म, और यह एकमात्र घटक है जो बैकिंगबीन से जुड़ा हुआ है। मेरा मतलब है, यह इतना डरावना है कि जेएसएफ को पहली बार गेटटर विधि में आने पर मूल्य प्राप्त करना चाहिए, हालांकि इसे गेटटर विधि पर दो बार जाना होगा। क्या आप समझा सकते हैं कि जेएसएफ में इस व्यवहार का कारण क्या है?एक जेएसएफ पेज और एक प्रबंधित बीन के बीच, गेटर विधि को दो बार

किसी भी मदद की सराहना की जाएगी, शुभकामनाएं, Baris

उत्तर

16

गेटर, इसका नाम पहले से ही स्वयं का वर्णन करता है, को शुद्ध उद्देश्य के साथ सिर्फ वहाँ के रूप में डेटा पुनः प्राप्त। जेएसएफ इस डेटा को कैश नहीं करता है। जब भी जरूरत हो यह इसे कॉल करेगा। गेटटर को कॉल करने की लागत अभ्यास में निहिल है - जब तक आप डेटा वापस करने से कुछ और नहीं करते हैं, उदा। डीबी को हर बार मारते हुए, इस तर्क को गेटटर से बाहर ले जाया जाना चाहिए या आलसी लोडिंग में बदल दिया जाना चाहिए।

किसी फॉर्म सबमिट करने के मामले में, पहली बार कॉल प्राप्त करने के लिए सत्यापन चरण के दौरान पहले कॉल कॉल को निकाल दिया जाता है ताकि कोई प्रारंभिक मूल्य हो ताकि JSF मूल्य परिवर्तन ईवेंट को संभाल सके। दृश्य में मॉडल मान प्रदर्शित करने के लिए प्रतिक्रिया चरण प्रस्तुत करने के दौरान आमतौर पर दूसरी कॉल को निकाल दिया जाता है।

आप जेएसएफ जीवन चक्र के बारे में और जानने के लिए this article उपयोगी भी पा सकते हैं। आप this answer को बैकिंग बीन में प्रीप्रोकैसिंग/प्रारंभ करने के तरीकों के बारे में अधिक जानने के लिए उपयोगी पा सकते हैं।

+0

आपको बहुत बहुत धन्यवाद। बीटीडब्लू मुझे यह उल्लेख करने योग्य लगता है कि मेरा मतलब फॉर्म सबमिट नहीं किया गया था, फिर भी मेरा मतलब है अनुरोध के पहले चरण, जब पृष्ठ पहली बार प्रस्तुत किया जा रहा है। उस प्रक्रिया के दौरान, घटकों के मूल्य (गेटर विधि) को दो बार बुलाया जा रहा था, हालांकि मुझे लगता है कि पहली बार गेटर विधि तक पहुंचने पर, इसे चर के मान प्राप्त करना चाहिए, है ना? मैं आपके द्वारा पोस्ट किए गए लेख पढ़ूंगा, और यदि आपके पास इसके बारे में और कोई विचार है तो आप खुश होंगे अगर आप मेरे साथ साझा करते हैं। फिर से धन्यवाद, बारिस – Javatar

+1

फिर आपने इस संपत्ति को दो बार दृश्य में बाध्य कर दिया है। कॉल स्टैक के बारे में अधिक जानने के लिए गेटटर विधि में 'Thread.dumpStack()' जोड़ें ताकि आप यह समझ सकें कि इसकी उत्पत्ति कहां से हुई थी। – BalusC