Каскадный динамический рендеринг selectOneMenu не работает

#jsf-2

#jsf-2

Вопрос:

Моя проблема, о которой я думаю, проста, но я не могу найти четкого решения.

У меня есть три selectOneMenu, и я хочу, чтобы первый всегда отображался, второй отображался, если для первого выбрано какое-то значение, а третий отображался, если для второго выбрано какое-то значение.

Связь между первым и вторым работает хорошо, но не работает между вторым и третьим.

Когда я меняю значение для первого selectOneMenu, второе selectOneMenu отображается или скрывается правильно. Но когда я меняю значение для второго, с третьим 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:

Эта конструкция завершится ошибкой, если компонент находится в области запроса и / или вы выполняете бизнес-действия (например, предварительную загрузку списка) в методах получения вместо методов прослушивания действий. Убедитесь, что компонент помещен в область представления и что вы выполняете бизнес-действия в методах прослушивателя действий.

Если это не решит проблему, то вам действительно нужно опубликовать код резервного компонента вместе с кодом представления в вашем вопросе.

Комментарии:

1. Спасибо за ваш ответ, я упростил код моего резервного компонента, чтобы опубликовать его, наконец, с упрощенным кодом проблема исчезла. итак, проблема заключалась в том, что вспомогательный компонент имеет родительский компонент, и этот родительский компонент не был сериализуемым, я делаю его сериализуемым, и проблема решена.