如何使用事件onclick按钮停止所有p:poll

时间:2018-03-21 17:47:24

标签: primefaces

例如,我有20个图表。有时间刷新不同。当updateChart时,我会做一些事情并更新成功。

<c:foreach var="chart" items="#{bean.charts}>
  <p:poll interval="#{chart.timeRefresh}" listener="#{bean.updateChart(chart)}"/>
  <div>..draw one-by-one chart here.</div>
</c:foreach>
<p:commandButton id="showInforDialog" actionlistener="#{bean.dosomething()}" onsuccess="PF('dlgInfor').show();"/>

例如,alls图表具有相同的时间刷新并且等于1。当我单击按钮btnStopAllPoll将调用dosomething()并显示对话框,但我必须等待很长时间。我认为20个请求将依次处理。 我有一个想法,创建buttononclick将停止我尝试的所有民意调查:

<p:commandButton id="stoppAllPoll" onclick="stopAllPoll()"/>

但我不知道该怎么做。请帮我!或者你有新想法。 我不明白为什么要依次处理20个请求,或者我错了

1 个答案:

答案 0 :(得分:2)

首先,默认情况下,轮询Ajax操作是同步执行的。因此,如果您执行20个操作,它们将排队并一次执行一个。这可能需要一段时间,并解释您遇到的延迟。将async组件的p:poll属性设置为true以阻止此操作。

然后,为什么首先使用20个民意调查?仅使用1次民意调查是否更清晰?您可以指定需要更新的多个组件,即使使用selector也是如此。这也可以防止您用完客户端甚至服务器可以同时处理的连接数。

如果您确实要停止多个民意调查,请使用widgetVar="pollXxx",以便您可以使用JavaScript停止它们:

PF('poll1').stop();
PF('poll2').stop();
...