如何在JSF组件中监视异步/后台线程状态并获取通知



我在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页面

最新更新