2011-10-17 75 views
1

我的問題我認爲很簡單,但我找不到明確的解決方案。級聯動態渲染selectOneMenu不起作用

我有三個selectOneMenu,我希望第一個總是呈現,第二個呈現,如果第一個有一些選定的值,第三個呈現如果第二個選擇了一些值。

的第一個和第二個運作良好的關係,但沒有第二個和第三之間的合作。

當我改變用於第一selectOneMenu用於所述值的第二selectOneMenu用於被diplayed或隱藏正確。 但是,當我改變第二個值時,第三個selectOneMenu沒有發生,就像f:ajax渲染未被觸發一樣。

貝婁的JSF代碼:

<h:panelGrid columns="2"> 
    <h:outputText value="Type Paiement" /> 
     <h:selectOneMenu 
      value="#{employeurBean.idTypePaiement}"> 
      <f:selectItem itemValue="" itemLabel="Choix typePaiement" /> 
      <f:selectItems value="#{typePaiementBean.typesPaiement}" var="vtp" 
      itemLabel="#{vtp.libelle}" itemValue="#{vtp.idTypePaiement}" /> 
      <f:ajax event="change" render="gmodp" /> 
     </h:selectOneMenu>  
</h:panelGrid> 

<h:panelGrid id="gmodp"> 
<h:panelGroup rendered="#{employeurBean.idTypePaiement == 2}"> 
    <h:outputText value="Mode Paiement" /> 
     <h:selectOneMenu 
      value="#{employeurBean.idModePaiement}"> 
      <f:selectItem itemValue="" itemLabel="Choix mode Paiement" /> 
      <f:selectItems value="#{modePaiementBean.modesPaiement}" var="vmp" 
      itemLabel="#{vmp.libelle}" itemValue="#{vmp.idModePaiement}" /> 
     <f:ajax event="change" render="grib"/> 
    </h:selectOneMenu> 
</h:panelGroup> 
</h:panelGrid> 

<h:panelGrid id="grib"> 
<h:panelGroup rendered="#{employeurBean.idModePaiement == 1}"> 
    <h:outputText value="Compte" /> 
    <h:inputText value="#{employeurBean.compte}"> 
    </h:inputText> 
</h:panelGroup> 
</h:panelGrid> 

是否有任何想法,以實現這一目標。 非常感謝您的幫助

回答

1

如果bean是請求作用域和/或您在getter方法而不是動作偵聽器方法中執行業務操作(例如預加載列表),則此構造將失敗。確保bean已放置在視圖範圍內,並且您正在操作偵聽器方法中執行業務操作。

如果不解決這個問題,那麼你真的要一起發佈視圖代碼支持bean代碼在你的問題。

+0

感謝您的回答,我正在簡化我的支持bean的代碼以發佈它,最後用簡化代碼解決問題。所以問題是backing bean有一個父bean,而且這個父bean是不可序列化的,所以我使它成爲可序列化的並且解決了問題。 –