2012-09-21 62 views
5

當我選擇第一個SelectOnMenu的任何項目時,我想更新第二個SelectOneMenu。現在,我從ManagedBean中獲取SelectOneMenus的值。我想我必須使用AJAX(jQuery)將參數發送到ManagedBean。SelectOneMenu更新其他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當你selectOneMenu用於更改值:

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

然後,在你的豆你有這樣的方法:

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

要更新你的頁面可以將onchange="submit()"添加到您的<h:selectOneMenu/>。對於一些局部呈現,你可以嘗試添加該的<f:ajax/>代替onchange="submit()"

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

如果我沒有記錯的話,你會想在第一時間拿到菜單中選擇元素的ID和填充根據第二個它。然後,您可以渲染其他selectOneMenu,或者,如果需要,還可以使用包裝表單的一部分的面板。

+0

是否有可能在沒有changeListener的情況下發送參數? –

+0

請問您能否詳細闡述您的背景?你想達到什麼和/或你有什麼限制? – Gamb

+0

現在你的解決方案可以正常工作,但是它有一個小錯誤。當您第一次打開此網站時,第二個SelectOneMenu中沒有值,因爲如果您第一次更改所選項目,則只會調用valueChangedEvent。 –

0

Primefaces有一個偉大的功能,你試圖實現。它已經使用Ajax,所以不必擔心編寫自己的代碼。

+0

我可以使用 insteaf primefaces嗎? 如何向bean發送參數? –