जब किसी को f: viewAction या preRenderView ईवेंट का उपयोग करना चाहिए, तो @PostConstruct एनोटेशन का उपयोग करते हुए किसी पृष्ठ छंद के लिए डेटा को इनिशियलाइज़ करने के लिए?
<f:viewAction>HTML रेंडर करने से पहले जब आप किसी विधि को निष्पादित करना चाहते हैं तो इसका उपयोग करें । यह विशेष रूप से उपयोगी है यदि आप <f:viewParam>अद्यतन मॉडल मान चरण के दौरान निर्धारित मॉडल मूल्यों के आधार पर क्रिया करना चाहते हैं । अर्थात्, वे इस समय उपलब्ध नहीं हैं @PostConstruct। JSF 2.0 / 2.1 में, यह टैग मौजूद नहीं था और आपको preRenderViewवर्कअराउंड का उपयोग करना होगा ।
यदि बैकिंग सेम @RequestScoped है, तो क्या वे प्रभावी रूप से सटीक एक ही काम करते हैं? (और इसलिए यह डेवलपर की पसंद पर निर्भर है? (@PostConstruct लगता है "क्लीनर")।
नहीं, वे निश्चित रूप से प्रभावी रूप से एक ही काम नहीं करते हैं। @PostConstructकार्रवाई करने के लिए intented है सीधे सेम के निर्माण और सभी इंजेक्शन निर्भरता स्थापित करने और इस तरह के रूप में कामयाब गुण के बाद @EJB, @Inject, @ManagedProperty, आदि अर्थात्, इंजेक्शन निर्भरता नहीं सेम के निर्माता अंदर उपलब्ध हैं। इस प्रकार सेम, व्यू, सेशन या एप्लिकेशन स्कोप होने पर केवल एक बार व्यू, सेशन या एप्लिकेशन के अनुसार चलेगा। <f:viewAction>डिफ़ॉल्ट केवल प्रारंभिक GET अनुरोध पर लागू कर रहा है, लेकिन के माध्यम से कर सकते हैं onPostback="true"विशेषता साथ ही पोस्टबैक अनुरोध पर लागू किया जा करने के लिए विन्यस्त किया जा। preRenderViewघटना हर HTTP अनुरोध पर शुरू हो जाती है (हाँ, यह भी ajax अनुरोध शामिल हैं!)।
संक्षेप, उपयोग @PostConstructकरता है, तो आप इंजेक्शन निर्भरता और प्रबंधित गुण है जिसके द्वारा स्थापित कर रहे हैं पर कार्रवाई करने के लिए चाहते हैं @EJB, @Inject, @ManagedPropertyसेम के निर्माण के दौरान, आदि। उपयोग करें <f:viewAction>यदि आप भी द्वारा निर्धारित गुणों पर कार्रवाई करना चाहते हैं <f:viewParam>। यदि आप अभी भी JSF 2.0 / 2.1 पर हैं, तो preRenderViewइसके बजाय का उपयोग करें <f:viewAction>। यदि आवश्यक हो तो आप केवल प्रारंभिक अनुरोध पर कार्रवाई FacesContext#isPostback()करने के लिए एक चेक जोड़ सकते हैं preRenderView।
यह सभी देखें: