इस तरह देखें पारामों को परिभाषित करने में क्या अंतर है:
<f:metadata>
<f:viewParam name="id" value="#{someBean.id}"/>
</f:metadata>
और इस तरह से प्रबंधित में संपत्ति को परिभाषित करना:
@ManagedProperty(value = "#{param.id}")
private Integer id;
जवाबों:
<f:viewParam>:अद्यतन मॉडल मान चरण के दौरान मान सेट करता है (क्योंकि यह विस्तारित होता है UIInput)।
सेट वैल्यू के दौरान उपलब्ध नहीं है @PostConstruct, इसलिए आपको सेट वैल्यू के आधार पर इनिशियलाइज़ेशन / प्रीलोडिंग करने के लिए अतिरिक्त <f:event type="preRenderView" listener="#{bean.init}" />अंदर की आवश्यकता है <f:metadata>। JSF 2.2 के <f:viewAction>बजाय आप इसके लिए उपयोग कर सकते हैं ।
नेस्टेड <f:converter>और <f:validator>अधिक ठीक-ठीक रूपांतरण / सत्यापन के लिए अनुमति देता है । यहां तक कि एक <h:message>संलग्न किया जा सकता है।
किसी URL में includeViewParamsविशेषता <h:link>या includeViewParams=trueअनुरोध पैरामीटर का उपयोग करके GET क्वेरी स्ट्रिंग के रूप में शामिल किया जा सकता है ।
एक @RequestScopedबीन पर इस्तेमाल किया जा सकता है , लेकिन इसके लिए बीन की आवश्यकता होती है @ViewScopedयदि आप चाहते हैं कि दृश्य मापदंडों को दृश्य में संलग्न प्रपत्रों के कारण किसी भी सत्यापन विफलताओं से बचना चाहिए, अन्यथा आपको <f:param>कमांड द्वारा बाद के अनुरोधों के लिए सभी अनुरोध मापदंडों को मैन्युअल रूप से बनाए रखने की आवश्यकता है अवयव।
उदाहरण :
<f:metadata>
<f:viewParam id="user_id" name="id" value="#{bean.user}"
required="true" requiredMessage="Invalid page access. Please use a link from within the system."
converter="userConverter" converterMessage="Unknown user ID."
/>
</f:metadata>
<h:message for="user_id" />
साथ में
private User user;
और एक @FacesConverter("userConverter")। Http://example.com/context/user.xhtml?id=123 द्वारा पृष्ठ को आमंत्रित करना idकनवर्टर के माध्यम से पैरामीटर पास करेगा और Userऑब्जेक्ट को सेम प्रॉपर्टी के रूप में सेट करेगा ।
@ManagedProperty:बीन के निर्माण के तुरंत बाद मूल्य सेट करता है।
सेट वैल्यू उपलब्ध है @PostConstructजिसके दौरान सेट वैल्यू के आधार पर अन्य गुणों के आसान इनिशियलाइज़ेशन / प्रीलोडिंग की अनुमति मिलती है।
देखने में घोषणात्मक रूपांतरण / सत्यापन के लिए अनुमति नहीं देता है।
#{param}अनुरोधित दायरे की तुलना में व्यापक पैमाने पर सेम की प्रबंधित संपत्ति की अनुमति नहीं है, इसलिए सेम होना आवश्यक है @RequestScoped।
यदि आप #{param}बाद के POST अनुरोधों में मौजूद एक प्रबंधित संपत्ति पर भरोसा करते हैं, तो आपको इसे घटकों के रूप <f:param>में शामिल करने की आवश्यकता है UICommand।
उदाहरण :
@ManagedProperty("#{param.id}")
private Long id;
private User user;
@EJB
private UserService userService;
@PostConstruct
public void init() {
user = userService.find(id);
}
लेकिन आपको जब भी या कुछ के साथ फ़िदेलिंग करना होता userहै, तो आपको अपने आप को सत्यापन का प्रबंधन करना होगा।nullFacesContext#addMessage()
आप दोनों का उपयोग कर सकते हैं जब दोनों अनिवार्य हैं @PostConstructऔर includeViewParamsअनिवार्य हैं। अब आप केवल ठीक-ठीक रूपांतरण / सत्यापन लागू नहीं कर पाएंगे।
@ManagedPropertyअनुरोध पैरामीटर को असंभव बनाती है।
<f:event type="preRenderView">जेएसएफ 2.2 द्वारा या आगामी द्वारा लाया जाता है <f:viewAction>।
2 अन्य अंतर:
@ManagedPropertyजेएसएफ द्वारा प्रबंधित बीन्स के साथ ही उपयोग करने योग्य है, सीडीआई द्वारा प्रबंधित बीन्स के साथ नहीं ( @Named);
<f:viewParam> केवल GET अनुरोधों के मापदंडों के साथ काम करता है।