这里的第一篇文章,所以和我有点裸露。搜索了很多,但要么是因为我盲目,要么是因为我只是没有使用正确的搜索字符串,我还没有找到任何与我的问题相关的答案。
基本上,我有一个用Java编写并使用Primefaces的Web应用程序。我使用的是 p:layout,主要内容在布局的中心单元中,页眉在北部,页脚位于布局的南部单元中。西布局单元包含一个 p:poll,每两秒运行一次 c,并在触发 oncomplete 事件时调用 js 函数。
目前为止,一切都好。问题是,在某个页面上,在中心布局单元中,我有一个 f:viewParam,它只接受长整型,即使该值有效,当执行上述轮询时,会出现来自 f:viewParam 的所需消息。
在进行了一些密集的搜索后,我发现通过在 p:poll 中添加 ignoreAutoUpdate="true",来自 f:viewParam 的消息不会被触发,并且不会显示告诉我必须提供有效 id 的警告。
所以,我的问题是:在我的p:poll中使用ignoreAutoUpdate="true"会损害f:viewParam验证吗?还是把它留在那里安全吗?
这是我布局中的相关部分:
民意调查形成西部布局单元:
<h:form id="liveQueueForm">
<p:remoteCommand name="rcStart" action="#{liveQueueMB.startPoll()}"/>
<p:remoteCommand name="rcStop" action="#{liveQueueMB.stopPoll()}"/>
<p:poll id="liveQueueUpdater" delay="10" widgetVar="livePoll" interval="2" listener="#{liveQueueMB.init}" oncomplete="updateLiveQueue(xhr, status, args);" autoStart="true" partialSubmit="true" ignoreAutoUpdate="true" immediate="true" />
<div id="live-queue">
<div id="queue-holder"></div>
</div>
</h:form>
保存我的 f:viewParam 的 f:metadata 块:
<f:metadata>
<f:viewParam name="callId" value="#{viewInboundCallDetailsMB.callId}" required="true" requiredMessage="Please provide a valid call ID" converter="javax.faces.Long" converterMessage="The call ID is not numeric" />
<f:viewAction action="#{viewInboundCallDetailsMB.init}"/>
</f:metadata>
谢谢!
来自 Primefaces 手册关于忽略自动更新:"如果为 true,则 autoUpdate="true" 的组件将不是针对此请求进行了更新。如果未指定,或者值为错的,没有做出这样的指示。
这意味着它不会更新您的 viewParam 组件,以及其他具有 autoUpdate="true" 的组件。
它不会禁用对它的验证。(当然,除非你使用你的民意调查进行验证,我认为你不是)