JSF 2/primefaces: p: панель не отображается с помощью ajax?

Я не уверен, нормально ли это поведение или нет.
Я надеюсь, что мой panel будет отображаться только после нажатия кнопки, которая запускает запрос ajax.

Не использовать Ajax отлично работает:

  • p:panel id="myPanel" rendered="#{myBean.flag}"
  • p:commandButton ajax="false" action="#{myBean.setFlagToTrue}"
  • перед нажатием кнопки myPanel не отображается (flag = false)
  • нажав кнопку, установите флаг в значение true, а myPanel будет рендеринга

Использование ajax не выполняется:

  • p:panel id="myPanel" rendered="#{myBean.flag}"
  • p:commandButton ajax="true" action="#{myBean.setFlagToTrue}" update="myPanel"
  • перед нажатием кнопки myPanel не отображается (flag = false)
  • нажав кнопку, установите флаг в true (как показано в моем файле журнала), а myPanel не отображается

Я пробовал исключить атрибут rendered, и действительно, ajax отлично работает.
Я могу сказать, что, посмотрев на изменения, отраженные внутри панели.

Ответы

Ответ 1

поместите вашу панель с условным рендерингом внутри другого и обновите ее. Вот так:

<p:outputPanel id="toUpdate">
  <p:panel id="myPanel" rendered="#{myBean.flag}">
  </p:panel>
<p:outputPanel>

<p:commandButton update="toUpdate"/>

Это известная проблема. Элемент не может быть обновлен, если он не существует в DOM.