У меня есть p:commandButton
, который вызывает метод bean-объекта в области видимости. Метод устанавливает два строковых поля с именем textA and textB
и возвращает.
Как только вызов ajax завершится, появится диалоговое окно. Я ожидаю, что только одна из сеток будет отображаться на основе переменной choice
. Его начальное значение choiceA
. Что происходит, страница загружается с выбором по умолчанию A, я нажимаю кнопку, метод actionListener устанавливает textA
, и появляется диалоговое окно. Как и ожидалось, есть только одна сетка.
Однако, когда я выбираю choiceB, отображается та же самая сетка, gridA
. Другими словами, атрибут rendered
p:panelGrid
s корректно работает только при загрузке страницы, но не обновляется при последующих вызовах ajax. Странно, textA and textB
хорошо обновляется.
Ниже приведена соответствующая часть кода.
<h:form>
<p:selectOneRadio id="optionChoice" value="#{bean.choice}"
<f:selectItem itemLabel="B" itemValue="choiceB" />
<f:selectItem itemLabel="A" itemValue="choiceA" />
</p:selectOneRadio>
<p:commandButton value="Save"
actionListener="#{bean.save}"
update="dialogId"
oncomplete="ajaxComplete(xhr, status, args)">
</h:form>
...
<p:dialog widgetVar="dialog" id="dialogId">
<p:tabView id="tabViewX">
<p:tab id="tabA" title="Tab A">
<h:panelGrid id="gridA" rendered="#{bean.choice eq 'choiceA'}">
<p:inputTextarea value="#{bean.textA}" />
<h:button />
</h:panelGrid>
<h:panelGrid id="gridB" rendered="#{bean.choice eq 'choiceB'}">
<p:inputTextarea value="#{bean.textB}" />
</h:panelGrid>
</p:tab>
</p:tabView>
</p:dialog>
Любые предположения, почему атрибут update
p:commandButton
обновляет только inputTextArea's value
, но не panelGrid's rendered
?
Я тоже пробовал update="tabViewX:gridA tabViewX:gridB"
. Также не работает.
JSF-версия: Mojarra JSF API (javax.faces / 2.1) 2.1.5 (20111123 - SNAPSHOT). Primefaces 3.0.0 - Murat 2 минуты назад редактировать