JSF 2/primefaces : p:panel 没有用 ajax 呈现? [英] JSF 2 / primefaces : p:panel not rendered with ajax?

查看:22
本文介绍了JSF 2/primefaces : p:panel 没有用 ajax 呈现?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Im not sure if this behaviour is normal or not.
Im hoping that my panel will be rendered only after clicking on a button that triggers an ajax request.

不使用 Ajax 工作正常:

Not using Ajax works fine :

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

使用 ajax 失败:

Using ajax fails :

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

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

I've tried omitting the rendered attribute, and indeed the ajax works fine.
I can tell that by looking at the changes reflected inside the panel.

推荐答案

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

put your panel with conditional rendering inside another and update it. Like this:

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

<p:commandButton update="toUpdate"/>

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

This is a known issue. The element can't be updated if it doesn't exist in DOM.

这篇关于JSF 2/primefaces : p:panel 没有用 ajax 呈现?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆