【问题标题】:Can't stop primefaces poll无法停止 primefaces 民意调查
【发布时间】:2012-01-01 05:20:04
【问题描述】:

我正在实现一些需要公共轮询以从服务器获取新值的对话框。 我正在尝试使用 p:poll,但不幸的是我无法阻止它。 当用户单击一个对话框中的按钮时,我开始投票,并尝试在用户单击子对话框中的按钮时停止投票。这是我用来启动和停止投票的代码:

第一个对话框:

<p:poll autoStart="false" widgetVar="pollQtdDisponivelCarregamento" immediate="true"
    update="labelQuantidadeDisponivelCarregamento labelQuantidadeDisponivelItem"
    listener="#{atualizadorQuantidadeDisponivelProduto.atualizarQuantidadeDisponivel(modeloPopupCarregarProduto.produtoSelecionado)}" />
<p:commandButton action="#{controladorPopupCarregarProduto.abrir}"
    value="#{vendaMsg['popup.pre_venda.botao.adicionar_produto']}"
    title="#{vendaMsg['popup.pre_venda.botao.adicionar_produto.descricao']}"
    update="@form" onclick="pollQtdDisponivelCarregamento.start()" />

子对话框:

<p:commandButton value="OK" style="float:right" immediate="true"
    action="#{controladorPopup.fechar}" update="@form"
    onsuccess="pollQtdDisponivelCarregamento.stop();" />

我无法理解的一件事是:当我使用 Firebug 调试中断 javascript 执行时,轮询会正确停止,但是当我不这样做时,它就不会停止。 有人知道我该如何解决这个问题吗??

【问题讨论】:

    标签: javascript jsf-2 primefaces polling


    【解决方案1】:

    我在“投票”组件上遇到了类似的问题(谷歌发给我这里)。据我所知,您的标记存在两个问题。我使用的是 Primefaces 3.0M4

    问题 1

    使用&lt;p:poll clientVar="myPoll"/&gt; 将创建一个可使用window.myPoll 访问的javascript 对象。如果重新呈现包含表单(请参阅您的“更新”属性),此属性将被覆盖。问题是在引擎盖下使用了“window.setInterval”。如果在替换蜜蜂之前轮询器没有停止,则此间隔丢失。

    解决办法:

    1. 您可以创建一个仅包含投票组件的顶级&lt;form&gt;
    2. onclick="pollQtdDisponivelCarregamento.start(); return false;" 阻止将表单发送到服务器。 (我怀疑这是你的意图)

    问题 2

    poll.start() 不检查它是否已经在运行。调用它两次将导致 另一个 间隔被安排。第一个的 id 丢失了,但它仍然在那里向您的服务器发送请求。尝试快速单击“第一个对话框”中的按钮。

    解决办法:

    首先调用poll.isActive()检查它是否已经运行。

    【讨论】:

    • 顺便说一句。您写道“当我使用 Firebug 中断 javascript 执行时”。但是在哪里?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多