如何防止PrimeFaces民意调查清除FacesMessages?

Rue*_*Kow 7 jsf polling primefaces

我正在使用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>
Run Code Online (Sandbox Code Playgroud)

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

是否可以在不设置消息autoUpdate = false的情况下阻止轮询清除FacesMessages?

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

Bal*_*usC 13

PrimeFaces 2.x/3.x.

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

如果<p:poll>触发,则其客户端ID显示为javax.faces.source请求参数.所以,这应该做:

<p:messages ... rendered="#{param['javax.faces.source'] ne poll.clientId}" />
...
<p:poll binding="#{poll}" ... />
Run Code Online (Sandbox Code Playgroud)

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

PrimeFaces 4.x +

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

<p:poll ... ignoreAutoUpdate="true" />
Run Code Online (Sandbox Code Playgroud)


mon*_*eyt 9

对于使用Primefaces 4.0及更高版本的人,Primefaces团队为其ajax感知组件添加了一个属性,以跳过autoUpdate设置为true的触发组件.所以你的民意调查就是

<p:poll ignoreAutoUpdate="true" .../>
Run Code Online (Sandbox Code Playgroud)

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