2014-06-30 7 views
10

किसी को ViewAction का उपयोग करके पृष्ठ के लिए डेटा प्रारंभ करने के लिए प्रीरेंडर व्यू ईवेंट का उपयोग कब करना चाहिए? क्या वे उपयोग में बराबर हैं और क्या उनका एक ही प्रभाव है?preRenderView बनाम viewAction का उपयोग कब करें?

preRenderView घटना

<f:metadata> 
    <f:event type="preRenderView" listener="#{myBean.initialize}"/> 
</f:metadata> 

या

viewAction

<f:metadata> 
    <f:viewAction action="#{myBean.initialize}"/> 
</f:metadata> 

उत्तर

16

अभ्यास में, वे एक ही प्रभाव को प्राप्त करने के लिए इस्तेमाल किया जा सकता है, लेकिन viewAction (JSF2 के साथ नए। 2) निम्नलिखित संवर्द्धन के साथ आता है:

  1. onPostback: viewAction यह विशेषता है कि आप है कि क्या आप चाहते हैं कार्रवाई एक ही दृश्य को पोस्टबैक पर निष्पादित किया जाना है (जो है, पृष्ठ ताज़ा या सबमिट बटन आदि पर) निर्दिष्ट कर सकते हैं के साथ आता है। यह false पर डिफ़ॉल्ट है, इसलिए आपको इसे निर्दिष्ट करने की आवश्यकता नहीं है यदि आपको आवश्यकता नहीं है। preRenderView के साथ एक ही प्रभाव को प्राप्त करने के लिए आपको

    <f:metadata> 
        <f:event type="preRenderView" rendered="#{facesContext.postBack}" listener="#{myBean.initialize}"/> 
    </f:metadata> 
    
  2. phase की आवश्यकता होगी: यह विशेषता आपके द्वारा निर्दिष्ट है कि कार्रवाई के लिए एक विशिष्ट JSF चरण के दौरान क्रियान्वित किया जा अनुमति देता है। यह INVOKE_APPLICATION पर डिफ़ॉल्ट है, लेकिन अन्य सभी जेएसएफ चरण आईडी यहां मान्य हैं।

  3. if: यह विशेषता आप एक मूल्य अभिव्यक्ति है कि एक बूलियन परिणाम का मूल्यांकन करने के लिए आपूर्ति की अनुमति देता है। दृश्य क्रिया केवल इस अभिव्यक्ति के परिणाम पर निष्पादित की जाएगी।

  4. immediate: यह विशेषता अब, के लिए एक viewAction (डिफ़ॉल्ट INVOKE_APPLICATION चरण की तुलना में) APPLY_REQUEST_VALUES चरण के दौरान क्रियान्वित किया जा करने की क्षमता देता है ऐसा लगता है जैसे एक नियमित UIComponent

कुल मिलाकर व्यवहार करने के लिए अनुमति देता है , viewAction दृश्य आदेशों को पूरा करने के लिए एक क्लीनर डिज़ाइन दृष्टिकोण है।

+1

'rendered =" ... "' ' 'टैग के साथ चाल मेरे लिए काम नहीं करती है (जंगली 9.0 पर मोजररा 2.2.11 के साथ)। [जेएसएफ 2.2 वीडीएल दस्तावेज] के अनुसार (https://docs.oracle.com/javaee/7/javaserver-faces-2-2/vdldocs-facelets/), ' 'में' rendered'- विशेषता। –

+0

यह @ मार्टिनहोलर को दस्तावेज नहीं किया गया है, लेकिन मेरे पास है (जब मैंने यह जवाब लिखा था) जीएफ 4 पर जेएसएफ 2.2, और टैग 'प्रस्तुत' विशेषता के साथ मौजूद है। शायद – kolossus

+0

देवताओं द्वारा निरीक्षण किया जा सकता है शायद कुछ मामूली संस्करण के साथ व्यवहारकर्ता बदल गया, लेकिन मैंने 'rendered =" false "की कोशिश की और 'श्रोता'-विशेषता के माध्यम से निर्दिष्ट विधि को हर बार दृश्य का अनुरोध करने के लिए बुलाया गया। –

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