无法阻止Primefaces民意调查
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法阻止Primefaces民意调查相关的知识,希望对你有一定的参考价值。
我正在实现一些需要通用轮询的对话框,以从服务器获取新值。我正在尝试使用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执行时,轮询会正确停止,但是当我不这样做时,它就不会停止。有人知道怎么解决这个问题?
答案
我在“民意调查”组件中遇到了类似的问题(谷歌发送给我这里)。据我所知,你的标记有两个问题。我使用的是Primefaces 3.0M4。
问题1
使用<p:poll clientVar="myPoll"/>
将创建一个可以使用window.myPoll
访问的javascript对象。如果重新呈现包含的表单(请参阅“更新”属性),则会覆盖此属性。问题是在引擎盖下使用'window.setInterval'。如果轮询器在更换之前未停止,则此间隔将丢失。
Solution:
- 您可以创建仅包含轮询组件的顶级
<form>
。 onclick="pollQtdDisponivelCarregamento.start(); return false;"
阻止将表单发送到服务器。 (我怀疑这是你的意图)
问题2
poll.start()
不会检查它是否已经在运行。调用它两次将导致另一个间隔被安排。第一个的ID丢失了,但它仍然在那里向您的服务器发送请求。尝试快速单击“第一个对话框”中的按钮。
Solution:
首先通过调用poll.isActive()
检查它是否已经运行。
以上是关于无法阻止Primefaces民意调查的主要内容,如果未能解决你的问题,请参考以下文章