2012-09-21 12 views
5

İlk SelectOnMenu öğesinin herhangi bir öğesini seçtiğimde ikinci SelectOneMenu'yu güncelleştirmek istiyorum. Şimdi olduğu gibi, bir ManagedBean'dan SelectOneMenus'un değerlerini alıyorum. ManagedBean'a parametre göndermek için AJAX (jquery) kullanıyorum.SelectOneMenu diğer SelectOneMenu güncelleştirmelerini güncelleştirir

<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> 

cevap

8

Aslında çağrılan bir ValueChangeListener kullanabilirsiniz onchange="submit()"'u <h:selectOneMenu/>'a ekleyebilir. Ben yanılmıyorsam

<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> 

ilk menüde seçilen elemanın id almak ve uygun ikinci bir doldurmak isteyeceksiniz: Bazı kısmi render için bu <f:ajax/> yerine onchange="submit()" ait eklemeyi deneyebilirsiniz o. Ardından, diğer selectOneMenu'yu veya gerekirse, formunuzun bir bölümünü sarmalayan bir paneli oluşturabilirsiniz.

+0

Parametreyi changeListener olmadan göndermek mümkün mü? –

+0

Lütfen, içeriğinizi biraz daha ayrıntılı hale getirebilir misiniz? Neyi başarmaya çalışıyorsunuz ve/veya hangi kısıtlamalarınız var? – Gamb

+0

Çözümünüzle şimdi iyi çalışıyor, ancak içinde küçük bir hata var. Bu siteyi ilk kez açtığınızda, 2. SelectOneMenu'da hiçbir değer yoktur, çünkü seçilen öğeyi ilk kez değiştirirseniz valueChangedEvent yalnızca çağrılır. –

0

Primefaces elde etmeye çalıştığınız ne büyük bir özelliği vardır. Zaten Ajax kullanıyor, bu yüzden kod yazmak için endişelenmenize gerek yok.

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... 
} 

sayfasını güncellemek için:

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

Ardından, fasulye bu yöntemi vardır: web selectOneMenu değeri değişir zaman

+0

insteaf primefaces kullanabilir miyim? Fasulye'e nasıl parametre gönderebilirim? –

İlgili konular