我正在使用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秒消失。
是否可以在不设置消息的情况下阻止民意调查清除FacesMessages autoUpdate = false?
我的网络应用程序比上面指定的代码段大得多,我的意图是不会在每种情况下手动更新消息!
答案 0 :(得分:13)
这本身不可能,所以需要一个技巧。在rendered
的{{1}}属性中,检查是否已触发<p:messages>
,如果是,则返回<p:poll>
。这样JSF认为在渲染过程中组件树中没有可自动更新的消息组件,因此会忽略它。
如果触发false
,则其客户端ID显示为<p:poll>
请求参数。所以,这应该做:
javax.faces.source
(注意:不需要额外的bean属性)
所有PrimeFaces命令组件都有一个新的<p:messages ... rendered="#{param['javax.faces.source'] ne poll.clientId}" />
...
<p:poll binding="#{poll}" ... />
属性,您可以将其设置为ignoreAutoUpdate
以忽略ajax更新中的所有false
组件。
autoUpdate="true"
答案 1 :(得分:9)
对于使用Primefaces 4.0及更高版本的人来说,Primefaces团队已经为其ajax感知组件添加了一个属性,以跳过触发autoUpdate设置为true的组件。所以你的民意调查将是
<p:poll ignoreAutoUpdate="true" .../>