Ajax, условный рендеринг и поддержка bean-компонентов - PullRequest
1 голос
/ 25 июля 2011

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

<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 (в случае, если это имеет какое-либо значение)

1 Ответ

1 голос
/ 25 июля 2011

Необходимо убедиться, что #{inputMethod.choice} оценивает точно так же во время запроса на обработку отправки формы, как это было во время запроса на отображение формы. Проще всего поместить компонент в область просмотра или переместить логику инициализации в конструктор (post) компонента, находящегося в области запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...