使用 jsf2.0和PrimeFaces 3.0.RC2 ,我想让<p:dataTable />
包含我的系统请求以及当一个用户持有请求时。我必须更新此请求的状态,并更新他们正在选择系统的所有其他用户<p:dataTable />
。
我怎样才能做到这一点?
假设此屏幕向10位用户显示,并且当用户更改状态并点击更新按钮时,应反映在所有用户的屏幕上。
如果有任何人在DB中添加新模型,则会出现这种情况。
我的意思是像电子邮件
这样的例子答案 0 :(得分:0)
当服务器端发生变化时,其他用户无法被动地知道(通过HTTP)。您必须以某种方式主动轮询服务器并更新UI中的更改。您可以创建一个计时器,它可以检查x秒,或者在不同的浏览器事件上执行(例如,当用户不再使用浏览器窗口然后返回它时)。
然而,最好的办法就是创建一个刷新按钮,这样用户只会在他们真正想要的时候轮询新数据,这样你就不会过度阅读数据库了。
答案 1 :(得分:0)
您需要寻找所谓的push
,reverse_ajax
或comet
技术。 PrimeFaces通过servlet实现此技术,但仅适用于Jetty服务器。请查看“用户指南”的第6章。
另外,请查看cometD,这是一个成熟的项目,以javascript和其他语言提供Bayeux协议的实现。该项目也使用Jetty,但可以移植到其他符合Servlet 3.0的servlet容器。我在GlassFish服务器上运行它没有任何问题,但在客户端我有一个dojo dataGrid。您可以尝试通过Javascript集成到PrimeFaces dataTable,虽然我还没有完成,但我不确定这是否是一项简单的任务。
答案 2 :(得分:0)
PrimeFaces的推送技术也适用于其他服务器,例如Glassfish。 一个很好的样本,如何实现它: http://www.primefaces.org/showcase/push/counter.jsf