Я пытаюсь отобразить страницу, на которой пользователь при помощи соответствующего переключателя с помощью переключателя видит либо текстовое поле, либо поле со списком. Это относительно просто, и мне удалось сделать это с помощью следующего кода:
<h:selectOneRadio id="selection" value="#{inputMethod.choice}">
<f:selectItem itemValue="#{inputMethod.TEXT}" itemLabel="textbox"/>
<f:selectItem itemValue="#{inputMethod.COMBO}" itemLabel="combobox" />
<f:ajax event="click" execute="@this" render="@form" />
</h:selectOneRadio>
<h:panelGroup id="Textbox" rendered="#{inputMethod.choice==inputMethod.TEXT}">
<h:outputLabel>Textbox:</h:outputLabel>
<h:inputText value="#{myBean.somevalue}" />
</h:panelGroup>
<h:panelGroup id="Combobox" rendered="#{inputMethod.choice==inputMethod.COMBO}">
<h:outputLabel Combobox:/>
<h:selectManyListbox id="CommunityListbox" value="#{myBean.choices}">
<f:selectItems value="#{myBean.selections}" var="u" itemValue="#{u.id}" itemLabel="#{u.name}"/>
</h:selectManyListbox>
</h:panelGroup>
У меня проблема в том, что установщик для поля со списком никогда не вызывается.
Фактически, сеттер вызывается только для компонента, который отображается по умолчанию (в этом случае всякий раз, когда inputMethod.choice==inputMethod.TEXT
). Если я уберу условный рендеринг, все сеттеры будут вызываться так, как и следовало ожидать.
Любые идеи или ответы будут с благодарностью!
PS: я использую jsf2.0, Glassfish 3.1, Netbeans 7.0 (в случае, если это имеет какое-либо значение)