我们可以使用JSF框架在HTML页面中引入钩子,允许服务器根据服务器以后发生的异步事件更新HTML页面,通常通过不同的线程?
解决方法
> OmniFaces有<o:socket>
(JSR356 WebSocket CDI)
> PrimeFaces有<p:socket>
(气氛)
> ICEfaces有ICEpush(长轮询)
> RichFaces有<a4j:push>
(大气JMS)
即将到来的JSF 2.3< f:websocket>是< o:socket>上的largely based.
PrimeFaces和RichFaces在引擎盖下使用Atmosphere(在没有Maven的情况下安装很麻烦),RichFaces将JMS添加到其上(因此它不会支持JMS,因此可以划分Tomcat).大气支持具有后退到SSE和长轮询的Websockets. ICEfaces是基于古老的长轮询技术.所有这些都不会实现Java EE 7后来引入的本机JSR356 WebSocket API.
OmniFaces使用原生JSR356 WebSocket API(在所有Java EE 7服务器和Tomcat 7.0.27中都支持).因此,设置和使用(一个JAR,一个上下文参数,一个标签和一个注释)也是最简单的.它只需要CDI(不难install on Tomcat),但它使您甚至可以从非JSF工件(例如@WebServlet)推送.对于安全和JSF查看状态保持原因,它只支持单向推送(服务器到客户端),而不是相反.为此,您可以通常使用JSF ajax.
或者,您也可以使用轮询而不是推送.每个ajax感知的JSF组件库都有一个< xxx:poll>零件.这允许您向服务器发送exery X秒ajax请求,并在必要时更新内容.它只是比推动效率低.
也可以看看:
> How to monitor asynchronous/background thread status and get notifications in a JSF component
> Real time updates from database using JSF/Java EE
> Notify only specific user(s) through WebSockets,when something is modified in the database