我想在用户空闲时自动更新数据表(在客户端上)。我将Primefaces 3.5与玻璃鱼一起使用,我的想法如下:
我在bean中有boolean autoUpdate
变量。用户可以打开/关闭自动更新。
我创建了两个组件:p:poll
和p: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>
只有当我从CCD_ 8开始并且我只能切换一次模式时,它才起作用。一旦渲染,就无法更改。我也试过
<p:ajax event="idle" oncomplete="#{cc.attrs.bean.autoUpdate ? 'myPoll.start();' : ''}" />
但它也不起作用。#{cc.attrs.bean.autoUpdate}
从未更改。即使我调用upadte,我也可以看到变量在另一个地方发生了变化。
所以,我的问题是:在idleMonitor被渲染后,有什么方法可以禁用它吗?或者,对于空闲用户的可选定期更新,什么是更好的解决方案?
您的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()函数,它可以停止空闲监视。