Primefaces,空闲时定期更新

问题描述:

我想在用户闲置时自动更新数据表(在客户端)。我使用的是PrimeFlash 3.5 with glassfish,我的想法如下:Primefaces,空闲时定期更新

我在boolean autoUpdate bean中有变量。用户可以打开/关闭自动更新。

我创建了两个组件:p:pollp:idleMonitor

idleMonitor有两个事件,其触发更新

<p:ajax event="idle" oncomplete="myPoll.start();" /> 
<p:ajax event="active" oncomplete="myPoll.stop();" /> 

这部分是确定的。问题是,如何将autoUpdate设置为False时禁用idleMonitor?当我做

<h:panelGroup id="updatePanel" rendered="#{cc.attrs.bean.autoUpdate}"> 
.... 
</h:panelGroup> 

,如果我开始与autoUpdate = false,我可以切换模式只有一次才起作用。一旦渲染,它就不能改变。我也试过

<p:ajax event="idle" oncomplete="#{cc.attrs.bean.autoUpdate ? 'myPoll.start();' : ''}" /> 

但它也没有工作。 #{cc.attrs.bean.autoUpdate}从未改变。即使我打电话给它,我可以看到在另一个地方变化的变量。

所以,我的问题是:有没有办法如何禁用idleMonitor后,它被呈现?或者对于空闲用户的可选定期更新,更好的解决方案是什么?

+0

所以你想空闲监视器,但只有一次?当第二次用户闲置时,你不需要该选项? –

+0

不,我想每次用户闲置时都需要空闲监视器。但只有当他将'autoUpdate'设置为'True'。这意味着,他可以在会话期间在“真”和“假”之间切换,而无需重新加载页面。 – tvazac

+0

嗯,你有没有尝试p:outputPanel而不是h:panelGroup?第一个更好的和声是我的主观感受。 –

您的autoUpdate变量仅在渲染时间上评估。 (在页面加载)

#{cc.attrs.bean.autoUpdate} 

这就是为什么js不知道它的修改。

溶液1,重新呈现一个js代码:

<p:ajax event="idle" update="afterIdle" /> 
<h:panelGroup id="afterIdle"> 
<h:outputScript> 
    if ('#{cc.attrs.bean.autoUpdate}' == 'true') 
    myPoll.start(); 
</h:outputScript> 
</h:panelGroup> 

溶液2:保持更新上自动更新一个js变量(以某种方式,例如用remoteCommand):

<p:ajax event="idle" oncomplete="myFunction()" /> 
<script type="text/javascript"> 
function myFunction(){ 
    if (jsAutoUpdate) myPoll.start(); 
} 
</script> 

解决方案3:primefaces idleMonitor小部件具有stop()函数,该函数停止空闲监视。