我在web应用程序中创建了几个线程,并且在JSF页面中有一个数据表组件。
我想自动更新该表,以显示线程的当前状态。在这种情况下,我可以使用任何预构建组件吗?
我在web应用程序中创建了几个线程
我衷心希望你做得对,这样就不会以史诗般的灾难告终。
我想自动更新表格以显示线程的当前状态。在这种情况下,我可以使用任何预构建组件吗
您基本上是在寻找一种称为";轮询";或";"推动";。轮询的基本概念是使用JavaScript的setInterval()
或setTimeout()
每隔一段时间向服务器发送一个(ajax)HTTP请求,并让它相应地处理结果。推送的基本概念是打开一个持久的HTTP连接,让服务器通过它发送小消息,这可以通过JavaScript中的WebSocket
和Java EE 7中的JSR356 API来完成。
标准JSF实现没有提供任何现成的轮询或推送组件。对于即将发布的JSF2.3,一个新的<f:websocket>
标签目前正在进行中(另请参阅问题1396)。
你最好的选择是一个带有<f:ajax>
的隐藏命令链接/按钮的隐藏表单,然后通过setInterval()
调用它。然而,像PrimeFaces这样的组件库提供开箱即用的组件,有关一些具体示例,请参阅<p:poll>
showcase和<p:push>
showcase。JSF实用程序库OmniFaces在其<o:commandScript>
中展示了一个轮询示例,在<o:socket>
中展示了几个推送示例(新标准JSF<f:websocket>
将主要基于<o:socket>
)。
另请参阅:
- 如何以1秒为间隔对组件进行ajax更新
- 使用JSF/Java EE从数据库进行实时更新
- 服务器如何将异步更改推送到JSF创建的HTML页面