14

我不确定这种行为是否正常。
我希望只有在单击触发请求panel的按钮后才会呈现我的内容。ajax

不使用 Ajax 可以正常工作:

  1. p:panel id="myPanel" rendered="#{myBean.flag}"
  2. p:commandButton ajax="false" action="#{myBean.setFlagToTrue}"
  3. 在单击按钮之前,不显示 myPanel(flag = false)
  4. 单击按钮,将标志设置为 true,并且 myPanel 呈现正常

使用 ajax 失败:

  1. p:panel id="myPanel" rendered="#{myBean.flag}"
  2. p:commandButton ajax="true" action="#{myBean.setFlagToTrue}" update="myPanel"
  3. 在单击按钮之前,不显示 myPanel(flag = false)
  4. 单击按钮,将标志设置为 true(如我的日志文件所示),并且 myPanel未呈现

我试过省略渲染属性,确实 ajax 工作正常。
我可以通过查看面板内反映的变化来判断这一点。

4

1 回答 1

35

将带有条件渲染的面板放在另一个面板中并更新它。像这样:

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

<p:commandButton update="toUpdate"/>

这是一个已知的问题。如果元素在 DOM 中不存在,则无法更新该元素。

于 2010-12-24T10:25:24.270 回答