2012-09-21 30 views
5

अपडेट करता है जब मैं पहले SelectOnMenu के किसी भी आइटम का चयन करता हूं तो मैं दूसरा SelectOneMenu अपडेट करना चाहता हूं। जैसा कि अब है, मुझे ManagedBean से SelectOneMenus के मान प्राप्त होते हैं। मुझे लगता है कि मुझे प्रबंधित बीन के पैरामीटर भेजने के लिए AJAX (jquery) का उपयोग करना होगा।SelectOneMenu अन्य सिलेक्टऑनमेनू

<h:form> 
    <div class="center"> 
     <h:panelGrid id="editTable" columns="2" styleClass="center"> 
      ... 
      <h:outputText value="#{msg.timetable_list_category}" /> 
      <h:selectOneMenu class="category"> 
       <f:selectItems value="#{categoryBackingBean.categorys}" var="c" 
        itemLabel="#{c.category_Name}" itemValue="#{c.id}" /> 
      </h:selectOneMenu> 

       <h:outputText value="#{msg.timetable_list_seminarblock}" /> 
      <h:selectOneMenu class="seminarblock"> 
       <f:selectItems value="#{seminarblockBackingBean.seminarblocks}" var="s" 
        itemLabel="#{s.seminarblock_Name}" itemValue="#{s.seminarblock_Id}" /> 
      </h:selectOneMenu> 
      ... 
     </h:panelGrid> 
     ... 
    </div> 
</h:form> 

उत्तर

8

वास्तव में आप एक ValueChangeListener कि शुरू हो जाती है का उपयोग कर सकते या तो onchange="submit()" को अपने <h:selectOneMenu/> पर जोड़ सकते हैं।

<h:selectOneMenu class="category" valueChangeListener="#{yourBean.selectOneMenuListener}"> 
    <f:selectItems value="#{categoryBackingBean.categorys}" var="c" 
     itemLabel="#{c.category_Name}" itemValue="#{c.id}" /> 
    <f:ajax event="change" execute="@form" render="theIdOfTheComponentYouWantToReRender"/> 
</h:selectOneMenu> 

अगर मैं गलत नहीं कर रहा हूँ आप पहली बार मेनू में चयनित तत्व की आईडी प्राप्त करने और के अनुसार एक दूसरे को भरने के लिए चाहता हूँ: आंशिक कुछ प्रतिपादन के लिए आप इस <f:ajax/>onchange="submit()" के बजाय जोड़ने की कोशिश कर सकते हैं यह। फिर आप अन्य selectOneMenu प्रस्तुत कर सकते हैं, या यदि आवश्यक हो, तो आपके फॉर्म का एक हिस्सा लपेटने वाला पैनल।

+0

क्या परिवर्तन के बिना पैरामीटर भेजने की संभावना है लिस्टनर? –

+0

क्या आप कृपया अपने संदर्भ को थोड़ी और आगे बढ़ा सकते हैं? आप क्या हासिल करने की कोशिश कर रहे हैं और/या आपके पास कौन से प्रतिबंध हैं? – Gamb

+0

आपके समाधान के साथ यह ठीक काम करता है, लेकिन इसमें थोड़ी सी बग है। जब आप पहली बार इस साइट को खोलते हैं, तो दूसरे SelectOneMenu में कोई मान नहीं है, क्योंकि valueChangedEvent केवल तभी कॉल किया जाता है, यदि आप पहली बार चयनित आइटम बदलते हैं। –

0

Primefaces आप क्या हासिल करने की कोशिश कर के एक महान सुविधा है। यह पहले से ही अजाक्स का उपयोग कर रहा है, इसलिए अपने कोड को लिखने के बारे में चिंता करने की ज़रूरत नहीं है।

public void selectOneMenuListener(ValueChangeEvent event) { 
    //This will return you the newly selected 
    //value as an object. You'll have to cast it. 
    Object newValue = event.getNewValue(); 
    //The rest of your processing logic goes here... 
} 

पेज आप अद्यतन करने के लिए:

<h:selectOneMenu class="category" valueChangeListener="#{yourBean.selectOneMenuListener}"> 
    <f:selectItems value="#{categoryBackingBean.categorys}" var="c" 
     itemLabel="#{c.category_Name}" itemValue="#{c.id}" /> 
</h:selectOneMenu> 

फिर, अपने सेम में आप इस विधि का है: जब आपके selectOneMenu परिवर्तन का मूल्य

+0

क्या मैं insteaf primfaces का उपयोग कर सकता हूं? मैं बीन को पैरामीटर कैसे भेज सकता हूं? –