इस तरह देखें पारामों को परिभाषित करने में क्या अंतर है:
<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
है, तो आपको अपने आप को सत्यापन का प्रबंधन करना होगा।null
FacesContext#addMessage()
आप दोनों का उपयोग कर सकते हैं जब दोनों अनिवार्य हैं @PostConstruct
और includeViewParams
अनिवार्य हैं। अब आप केवल ठीक-ठीक रूपांतरण / सत्यापन लागू नहीं कर पाएंगे।
@ManagedProperty
अनुरोध पैरामीटर को असंभव बनाती है।
<f:event type="preRenderView">
जेएसएफ 2.2 द्वारा या आगामी द्वारा लाया जाता है <f:viewAction>
।
2 अन्य अंतर:
@ManagedProperty
जेएसएफ द्वारा प्रबंधित बीन्स के साथ ही उपयोग करने योग्य है, सीडीआई द्वारा प्रबंधित बीन्स के साथ नहीं ( @Named
);
<f:viewParam>
केवल GET अनुरोधों के मापदंडों के साथ काम करता है।