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