无法阻止Primefaces民意调查

时间:2011-11-18 12:35:33

标签: javascript jsf-2 primefaces polling

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

firstDialog:

<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()" />

childDialog:

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

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

1 个答案:

答案 0 :(得分:6)

我在'民意'组件中遇到了类似的问题(谷歌发送给我这里)。据我所知,你的标记有两个问题。我正在使用 Primefaces 3.0M4

问题1

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

解决方案:

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

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

    解决方案:

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

相关问题