无法阻止Primefaces民意调查

问题描述 投票:5回答:1

我正在实现一些需要通用轮询的对话框,以从服务器获取新值。我正在尝试使用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执行时,轮询会正确停止,但是当我不这样做时,它就不会停止。有人知道怎么解决这个问题?

javascript jsf-2 primefaces polling
1个回答
6
投票

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

问题1

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

Solution:

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

问题2

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

Solution:

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

© www.soinside.com 2019 - 2024. All rights reserved.