क्या कोई स्पष्ट कर सकता है कि हम सामान्य रूप से, या वास्तविक दुनिया के उदाहरण में, इस स्निपेट का उपयोग कैसे कर सकते हैं?
<f:metadata>
<f:viewParam id="id" value="#{bean.id}" />
<f:viewAction action="#{bean.init}" />
</f:metadata>
क्या कोई स्पष्ट कर सकता है कि हम सामान्य रूप से, या वास्तविक दुनिया के उदाहरण में, इस स्निपेट का उपयोग कैसे कर सकते हैं?
<f:metadata>
<f:viewParam id="id" value="#{bean.id}" />
<f:viewAction action="#{bean.init}" />
</f:metadata>
जवाबों:
<f:viewParam>सेटिंग, रूपांतरण और GET पैरामीटर के सत्यापन का प्रबंधन करता है। यह जैसा है <h:inputText>, लेकिन तब GET मापदंडों के लिए।
निम्न उदाहरण
<f:metadata>
<f:viewParam name="id" value="#{bean.id}" />
</f:metadata>
मूल रूप से निम्नलिखित है:
id।required, validatorऔर converterगुण और घोंसला एक <f:converter>और <f:validator>के साथ के रूप में की तरह उस में <h:inputText>)#{bean.id}मूल्य द्वारा valueदर्शाई गई बीन संपत्ति के रूप में सेट करें , या यदि विशेषता अनुपस्थित है, तो इसे नाम पर अनुरोध के रूप में सेट करें idताकि यह #{id}दृश्य में उपलब्ध हो ।इसलिए जब आप पृष्ठ को खोलते हैं, foo.xhtml?id=10तब पैरामीटर मान 10बीन में इस तरह सेट हो जाता है, दृश्य प्रस्तुत होने से ठीक पहले।
सत्यापन के अनुसार, निम्न उदाहरण परम को required="true"10 और 20 के बीच के मूल्यों को निर्धारित करता है । कोई भी सत्यापन विफलता प्रदर्शित होने वाले संदेश के परिणामस्वरूप होगी।
<f:metadata>
<f:viewParam id="id" name="id" value="#{bean.id}" required="true">
<f:validateLongRange minimum="10" maximum="20" />
</f:viewParam>
</f:metadata>
<h:message for="id" />
आप इसके लिए उपयोग कर सकते हैं <f:viewAction>।
<f:metadata>
<f:viewParam id="id" name="id" value="#{bean.id}" required="true">
<f:validateLongRange minimum="10" maximum="20" />
</f:viewParam>
<f:viewAction action="#{bean.onload}" />
</f:metadata>
<h:message for="id" />
साथ में
public void onload() {
// ...
}
<f:viewAction>तथापि JSF 2.2 (के बाद से नया है <f:viewParam>पहले से ही JSF 2.0 के बाद से मौजूद है)। यदि आप अपग्रेड नहीं कर सकते हैं, तो <f:event>इसके बजाय आपका सबसे अच्छा दांव उपयोग कर रहा है ।
<f:event type="preRenderView" listener="#{bean.onload}" />
हालांकि यह हर अनुरोध पर लागू किया जाता है । यदि अनुरोध पोस्टबैक नहीं है, तो आपको स्पष्ट रूप से जांचना होगा:
public void onload() {
if (!FacesContext.getCurrentInstance().isPostback()) {
// ...
}
}
जब आप "रूपांतरण / मान्यता विफल" मामलों को भी छोड़ना चाहते हैं, तो निम्नानुसार करें:
public void onload() {
FacesContext facesContext = FacesContext.getCurrentInstance();
if (!facesContext.isPostback() && !facesContext.isValidationFailed()) {
// ...
}
}
<f:event>इस तरीके का उपयोग करना सार / हैक में है, यही कारण है कि <f:viewAction>JSF 2.2 में पेश किया गया था।
आप नेविगेशन लिंक में दृश्य पैरामीटर को "पास-थ्रू" कर सकते हैं, जो includeViewParamsविशेषता पैरामीटर सेट trueकरके या includeViewParams=trueअनुरोध पैरामीटर जोड़कर कर सकते हैं।
<h:link outcome="next" includeViewParams="true">
<!-- Or -->
<h:link outcome="next?includeViewParams=true">
जो उपरोक्त <f:metadata>उदाहरण के साथ मूल रूप से निम्न लिंक उत्पन्न करता है
<a href="next.xhtml?id=10">
मूल पैरामीटर मान के साथ।
यह दृष्टिकोण केवल आवश्यकता है कि next.xhtmlहै भी एक <f:viewParam>बहुत ही पैरामीटर पर, अन्यथा यह के माध्यम से पारित नहीं किया जाएगा।
<f:viewParam>भी "सादे HTML" मिल रूपों के साथ संयोजन में उपयोग किया जा सकता है।
<f:metadata>
<f:viewParam id="query" name="query" value="#{bean.query}" />
<f:viewAction action="#{bean.search}" />
</f:metadata>
...
<form>
<label for="query">Query</label>
<input type="text" name="query" value="#{empty bean.query ? param.query : bean.query}" />
<input type="submit" value="Search" />
<h:message for="query" />
</form>
...
<h:dataTable value="#{bean.results}" var="result" rendered="#{not empty bean.results}">
...
</h:dataTable>
मूल रूप से यह @RequestScopedबीन के साथ:
private String query;
private List<Result> results;
public void search() {
results = service.search(query);
}
ध्यान दें कि के <h:message>लिए है <f:viewParam>, सादे HTML नहीं <input type="text">! यह भी ध्यान दें कि इनपुट मूल्य #{param.query}तब प्रदर्शित होता #{bean.query}है जब खाली होता है, क्योंकि प्रस्तुत मूल्य अन्यथा सत्यापन या रूपांतरण त्रुटि होने पर बिल्कुल नहीं दिखाएगा। कृपया ध्यान दें कि यह निर्माण JSF इनपुट घटकों के लिए अमान्य है (यह "कवर के तहत" पहले से ही कर रहा है)।