例如,我有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个请求将依次处理。
我有一个想法,创建button
和onclick
将停止我尝试的所有民意调查:
<p:commandButton id="stoppAllPoll" onclick="stopAllPoll()"/>
但我不知道该怎么做。请帮我!或者你有新想法。 我不明白为什么要依次处理20个请求,或者我错了
答案 0 :(得分:2)
首先,默认情况下,轮询Ajax操作是同步执行的。因此,如果您执行20个操作,它们将排队并一次执行一个。这可能需要一段时间,并解释您遇到的延迟。将async
组件的p:poll
属性设置为true
以阻止此操作。
然后,为什么首先使用20个民意调查?仅使用1次民意调查是否更清晰?您可以指定需要更新的多个组件,即使使用selector也是如此。这也可以防止您用完客户端甚至服务器可以同时处理的连接数。
如果您确实要停止多个民意调查,请使用widgetVar="pollXxx"
,以便您可以使用JavaScript停止它们:
PF('poll1').stop();
PF('poll2').stop();
...