【问题标题】:How to prevent PrimeFaces poll from clearing FacesMessages?如何防止 PrimeFaces 民意调查清除 FacesMessages?
【发布时间】:2013-06-22 08:14:24
【问题描述】:

我正在使用 PrimeFaces 投票组件来刷新一些内容。

<h:form id="formBsvtt">
  <p:messages autoUpdate="true" showDetail="false" />
  <p:outputPanel id="panelOut" layout="block">
    ...
    ... content to refresh
    ...
  </p:outputPanel>
  <p:panelGrid id="panelIn" layout="block">
    ...
    ... various input components with validation
    ...
  </p:panelGrid>
  <p:poll widgetVar="poll1" autoStart="true" global="false" interval="15" 
    partialSubmit="true" process="@this" update="panelOut"
    listener="#{myBean.myListener}">
  </p:poll>
</h:form>

如您所见,我正在使用 autoUpdate=true 的消息。我的问题是:如果出现验证错误 FacesMessages 将显示,但不迟于 15 秒消失。

是否可以在不设置消息 autoUpdate=false 的情况下阻止民意调查清除 FacesMessages?

我的 Web 应用程序比上面指定的代码 sn-p 大得多,我的意图不是在每种可能的情况下手动更新消息!

【问题讨论】:

  • 您更新消息的标准是什么?我认为没有办法阻止p:poll 更新p:messages。我认为process 属性可以解决问题,但似乎并非如此。

标签: jsf primefaces polling


【解决方案1】:

PrimeFaces 2.x/3.x

这在本机是不可能的,所以需要一个技巧。在&lt;p:messages&gt;rendered属性中,检查&lt;p:poll&gt;是否被触发,如果触发则返回false。这样 JSF 在渲染过程中认为组件树中没有可自动更新的消息组件,因此会忽略它。

如果&lt;p:poll&gt; 被触发,则其客户端ID 显示为javax.faces.source 请求参数。所以,应该这样做:

<p:messages ... rendered="#{param['javax.faces.source'] ne poll.clientId}" />
...
<p:poll binding="#{poll}" ... />

(注意:不需要额外的 bean 属性)

PrimeFaces 4.x+

所有 PrimeFaces 命令组件都有一个新的 ignoreAutoUpdate 属性,您可以将其设置为 false 以忽略 ajax 更新中的所有 autoUpdate="true" 组件。

<p:poll ... ignoreAutoUpdate="true" />

【讨论】:

  • 您好 BalusC,您的解决方案非常完美。非常感谢您的支持!
  • 不客气。感谢您提出以前未在此处提出的问题:)
【解决方案2】:

对于使用 Primefaces 4.0 及更高版本的人,Primefaces 团队已向他们的 ajax 感知组件添加了一个属性,以跳过将 autoUpdate 设置为 true 的触发组件。所以你的投票是

<p:poll ignoreAutoUpdate="true" .../>

另请参阅他们的博客文章:http://blog.primefaces.org/?p=2836

【讨论】:

    猜你喜欢
    • 2015-10-26
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    相关资源
    最近更新 更多