2009-11-30 21 views
6

मेरे पास एक selectonemenu है जहां चयन में बदलाव उपयोगकर्ता को संबंधित पृष्ठ पर नेविगेट करना चाहिए।ValueChangeEvent से JSF पृष्ठ को फिर से लोड कैसे करें?

तो, मैं एक selectonemenu नियंत्रण का उपयोग कर कमांडबटन के क्रिया प्रबंधन को अनुकरण कैसे करूं (या यह हासिल करने के लिए और अधिक शानदार तरीके हैं)?

उत्तर

13

आप इसके लिए जावास्क्रिप्ट के शॉट के आसपास नहीं जा सकते हैं। असल में आपको जावास्क्रिप्ट को सर्वर की ओर से अनुरोध जमा करने की आवश्यकता है। एचटीएमएल <select> तत्व (जो जेएसएफ h:selectOneMenu द्वारा उत्पन्न किया गया है) में आप इसके लिए onchange विशेषता का सबसे अच्छा उपयोग कर सकते हैं। जब भी उपयोगकर्ता तत्व के मान को बदलता है तो आप इस ईवेंट से जुड़े किसी भी जेएस को बुलाया जाएगा।

<h:selectOneMenu onchange="this.form.submit();"> 

या यदि आप लिखित रूप में आलसी हैं, इस आशुलिपि भी सही है:

<h:selectOneMenu onchange="submit()"> 

यह वही प्रपत्र अंदर firstnext एचटीएमएल input type="submit" तत्व के साथ संयोजन में प्रपत्र प्रस्तुत करेगा (जो किया गया है जेएसएफ h:commandButton द्वारा उत्पन्न)।

<h:form> 
    <h:selectOneMenu value="#{bean.page}" onchange="submit()" required="true"> 
     <f:selectItem itemLabel="Select page.." /> 
     <f:selectItems value="#{bean.pages}" /> 
    </h:selectOneMenu> 
    <h:commandButton value="submit" action="#{bean.submit}" /> 
    <h:commandButton value="other" action="#{bean.other}" /> <!-- won't be submitted --> 
</h:form> 

आप कार्रवाई विधि है जो faces-config.xml में definied के रूप में जगह ले जाया जा नेविगेशन कार्रवाई का कारण बनता है में तर्क लिखने के लिए की जरूरत है। उदाहरण:

public String submit() { 
    return this.page; 
} 

आप करते हैं नहीं एक commandButton उपयोग करना चाहते हैं, तो आप भी आगे valueChangeListener कोस साथ जा सकते हैं:

<h:form> 
    <h:selectOneMenu value="#{bean.page}" onchange="submit()" 
     valueChangeListener="#{bean.change}" required="true"> 
     <f:selectItem itemLabel="Select page.." /> 
     <f:selectItems value="#{bean.pages}" /> 
    </h:selectOneMenu> 
</h:form> 

सेम में आप तो है:

public void change(ValueChangeEvent event) { 
    String page = (String) event.getNewValue(); // Must however be the exact page URL. E.g. "contact.jsf". 
    FacesContext.getCurrentInstance().getExternalContext().redirect(page); 
} 

वैकल्पिक रूप से, यदि आपके पास पहले से ही वांछित यूआरएल f:selectItem मूल्यों के रूप में है, तो आप आगे बुद्धि भी जा सकते हैं एच सिर्फ जेएस और कोई बीन क्रियाएं:

<h:selectOneMenu value="#{bean.page}" 
    onchange="window.location = this.options[this.selectedIndex].value"> 
    <f:selectItem itemLabel="Select page.." /> 
    <f:selectItem itemLabel="home" itemValue="home.jsf" /> 
    <f:selectItem itemLabel="faq" itemValue="faq.jsf" /> 
    <f:selectItem itemLabel="contact" itemValue="contact.jsf" /> 
</h:selectOneMenu> 
4
<h:selectOneMenu onchange="document.getElementById('myform').submit();" ...> 
संबंधित मुद्दे