我在 Web 应用程序中创建了几个线程,并且在 JSF 页面中有一个数据表组件。
我想自动更新表格以显示线程的当前状态。在这种情况下我可以使用任何预构建组件吗?
我在网络应用程序中创建了几个线程
我衷心希望您以正确的方式完成这件事,这样就不会导致一场史诗般的灾难。
我想自动更新表格以显示线程的当前状态。在这种情况下我可以使用任何预构建组件吗?
您基本上是在寻找一种称为“轮询”或“推送”的技术。轮询的基本概念是使用 JavaScript 的
setInterval()
或 setTimeout()
每隔一段时间向服务器发出(ajax)HTTP 请求,并让它相应地处理结果。推送的基本概念是打开一个持久的 HTTP 连接并让服务器通过它发送小消息,这可以通过 JavaScript 中的 WebSocket
和 Java EE 7 中的 JSR356 API 来完成。
在撰写本文时,标准 JSF 实现不提供任何现成可用的轮询或推送组件。对于即将推出的 JSF 2.3,新的 <f:websocket>
标签目前正在开发中(另请参阅
issue 1396)。 您最好的选择是带有隐藏命令链接/按钮和
<f:ajax>
的隐藏表单,然后通过
setInterval()
调用它。然而,像 PrimeFaces这样的组件库提供了开箱即用的组件,另请参阅
<p:poll>
Showcase了解一些具体示例。 JSF 实用程序库OmniFaces 在其
<o:commandScript>
展示中有一个投票示例,在
<o:socket>
展示中有几个推送示例(即将推出的标准 JSF
<f:websocket>
将主要基于 <o:socket>
)。另请参阅: