【问题标题】:Primefaces poll triggers message from f:viewParamPrimefaces 轮询触发来自 f:viewParam 的消息
【发布时间】:2015-03-19 18:21:59
【问题描述】:

第一次在这里发帖,对我来说一点点。搜索了很多,但无论是因为我是盲人还是因为我没有使用正确的搜索字符串,我都没有找到任何与我的问题相关的答案。

基本上,我有一个用 Java 编写并使用 Primefaces 的 Web 应用程序。我正在使用 p:layout,主要内容位于布局的中心单元,页眉位于北部,页脚位于布局的南部单元。 west 布局单元包含一个 p:poll ,它每两秒运行一次,并且在触发 oncomplete 事件时调用一个 js 函数。

到目前为止一切顺利。问题是,在某个页面上,在中心布局单元中,我有一个 f:viewParam,它只接受 long,即使该值有效,当执行上述轮询时,f:viewParam 中的 requiredMessage 也会出现。

在做了一些深入的搜索之后,我发现通过向 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>

谢谢!

【问题讨论】:

  • 你把&lt;f:metadata&gt;标签放在哪里了? &lt;p:poll&gt; 的进程属性默认设置为@form&lt;p:remoteCommand&gt; 设置为@all)。因此,它处理整个表单。您可能需要将&lt;p:poll&gt; 的进程属性设置为@this(除了&lt;p:remoteCommand&gt;)。
  • &lt;p:remoteCommand&gt; 标签基于存储在具有会话范围的 ManagedBean 中的布尔值使用。在提出 ignoreAutoUpdate="true" 解决方案之前,我已经考虑过这种可能性并进行了尝试......

标签: validation jsf primefaces ajax-polling viewparams


【解决方案1】:

来自 Primefaces 关于 ignoreAutoUpdate 的手册: "如果为真,autoUpdate="true" 的组件将不会 为此请求更新。如果未指定,或值为 false,没有这样的指示。”

这意味着它不会更新您的 viewParam 组件以及其他具有 autoUpdate="true" 的组件。

它不会禁用它的验证。 (当然,除非您使用投票进行验证,我认为您不是)

【讨论】:

    猜你喜欢
    • 2019-09-01
    • 2019-01-30
    • 2018-05-10
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    相关资源
    最近更新 更多