Primefaces,空闲时定期更新

时间:2013-07-25 12:49:24

标签: java jsf primefaces auto-update ajax-polling

我想在用户空闲时自动更新数据表(在客户端上)。我正在使用Primefaces 3.5和glassfish,我的想法是:

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

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

idleMonitor有两个事件,触发更新

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

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

<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}永远不会改变。即使我正在调用upadte,我也可以看到变量在另一个地方发生了变化。

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

1 个答案:

答案 0 :(得分:0)

仅在渲染时间评估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 :在autoUpdate上保持更新js变量(不知何故,例如使用remoteCommand):

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

解决方案3 :primefaces idleMonitor小部件有一个stop()函数,用于停止空闲监控。