2012-05-29 29 views
2

我有一個2列的面板網格,第一個包含一個標籤,第二個組件。 偵聽器backingBean.onFunktionChange將backingBean.functionGraduand的值設置爲true。因此,在這種情況下,學位的標籤和菜單被呈現。Ajax更新panelGrid的一部分

問題是,如果我先在城市的菜單中選擇一個城市,然後更改菜單「功能」中的值,則整個面板會更新,從而重置城市菜單。 但是,如果功能發生變化,我想保留預選的城市。

如果我在id = panelFunction的panelGroup中包裝函數和度數的標籤和組件,並且只更新此面板,則會破壞這兩個列布局。

有沒有可能只更新panelGrid的一部分而不影響panelGrid的佈局?

<h:panelGrid columns="2" id="panel"> 

    <label>#{function}</label> 
     <p:selectOneMenu id="menuFunction" value="#{...}" > 
      <p:ajax event="change" process="menuFunction" 
       update="panel" 
       listener="#{backingBean.onFunctionChange}" /> 
      <f:selectItems .../> 
     </p:selectOneMenu> 


     <h:outputLabel id="labelDegree" for="menuDegree" 
      value="#{msgs.degree}" 
      rendered="#{backingBean.functionGraduand}" /> 
     <p:selectOneMenu id="menuDegree" value="#{...}" rendered="#{backingBean.functionGraduand}"> 
      <f:selectItems .../> 
     </p:selectOneMenu> 


     <label class="required">#{msgs.city}</label> 
     <p:selectOneMenu value="#{...}" id ="city"> 
      <f:selectItems .../> 
     </p:selectOneMenu> 

    </h:panelGrid> 

回答

2

我解決了這個由Ajax請求處理整個面板:

...

<p:ajax event="change" process="panel" 
       update="panel" 
       listener="#{backingBean.onFunctionChange}" /> 

...