如前几篇文章所述,下一版本的JavaServer Faces(Mojarra)已添加了许多增强功能。 JSF 2.3计划于2017年与Java EE 8一起发布,但是您现在可以通过从源代码构建或运行里程碑版本来尝试JSF的一些增强和更新,以进行测试。

对API的此类增强之一是通过f:websocket标签和Push API添加了基于单向(服务器到客户端)的websocket推送通信。 OmniFaces团队开发了基于o:socket的JSF解决方案,该解决方案是OmniFaces实用程序库的一部分。 具体来说,JSR 372专家组成员Bauke Scholtz和Arjan Tijms对Mojarra代码库做出了此以及许多其他增强和修复。

启用f:websocket支持的补丁尚未应用于Mojarra 2.3分支,但是您可以从发行版JAVASERVERFACES_SPEC_PUBLIC-1396获得补丁。 在将修补程序应用于本地Mojarra克隆之前,应确保从中央2.3分支更新源,以确保已应用最新更新。 用法很简单,非常类似于OmniFaces站点上有据可查的o:socket功能,请执行以下步骤来使用f:websocket

首先,添加

javax.faces.ENABLE_WEBSOCKET_ENDPOINT

应用程序的web.xml的context参数,并将其值设置为true。

<context-param><param-name>javax.faces.ENABLE_WEBSOCKET_ENDPOINT</param-name><param-value>true</param-value></context-param>

客户端代码

在您的客户端(JSF视图)上,添加f:websocket标记,并指定要连接的通道。 您还必须指定一个onmessage侦听器,该侦听器将在收到消息后执行指定JavaScript函数。 还可以指定可选属性onclose ,以允许指定JavaScript函数在连接关闭时执行。 在以下示例中,我们指定套接字将与名为dukeSocketListeneronmessage侦听器连接到名为“ duke”的通道:

<f:websocket channel="duke" onmessage="dukeMessageListener"/>

可以使用三个参数(推送消息JSON对象,通道名称,消息事件)调用onmessage侦听器。 如果您只是希望传递一条消息,它可能类似于以下内容:

function dukeMessageListener(message) {PF('broadcastGrowl').show(message);
}

如果指定了可选的onclose侦听器,则相应的函数可以接受三个参数(关闭原因码–整数,通道名称,消息事件),但仅需要第一个。

在大多数情况下,其目的是向服务器发送一条消息,以通知具有相同websocket通道规范的所有客户端视图。 f:websocket上有一个可选的scope属性,可以将其设置为“ session”,这会将消息限制为仅在当前会话中使用相同websocket通道的所有客户端视图。

最后,如果需要,可以将可选port属性设置为指定除HTTP端口以外的TCP端口号。

服务器端代码

由于我们计划将消息从服​​务器推送到所有连接的客户端,因此让我们看一下服务器端代码。 可以通过包含@Push批注将新的PushContext注入到任何CDI工件中,并且上下文名称可以对应于通道名称,或者可以在@Push批注上指定可选的channel属性以指示要访问的通道该消息应广播。

@Inject @Pushprivate PushContext duke;
...
public void sendMessage(Object message){duke.send(message);
}

该消息将被编码为JSON,并传递到为f:websocketonmessage属性指定的客户端上JavaScript函数的message参数。 可以发送任何类型的容器作为消息,可以是普通的String,JavaBean,Map,Collection等。

用法示例

假设我们有一个用于Web应用程序的管理控制台,并且我们想为管理员提供一种向客户端发出警报的方法。 这样,管理控制台可以具有用于消息输入的文本区域,以及用于调用消息发送的命令按钮。

<h:inputText id="pushMessage" value="#{testBean.pushMessage}"/>
<h:commandButton action="#{testBean.sendAdminMessage}" value="Send Message"/>

然后,JSF控制器类testBean将具有sendAdminMessage方法,该方法将存储在pushMessage字符串中的消息发送到我们的sendMessage方法。

@Inject @Pushprivate PushContext duke;...public void sendAdminMessage(){sendMessage(pushMessage);FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Message has been broadcasted"));
}...public void sendMessage(Object message){duke.send(message);
}

任何将收到消息的客户端都应包含f:websocket标记,指向duke通道。 客户端还应该至少包括在收到消息时要调用JavaScript函数。

<f:websocket channel="duke" onmessage="dukeMessageListener"/><p:growl id="messages"/>function dukeMessageListener(message) {facesmessage.severity = 'info';PF('broadcastGrowl').show(message);
}

在此特定示例中,PrimeFaces咆哮消息组件将在收到消息时进行更新。

由于JSR 372专家组成员的所有杰出贡献,JSF 2.3的状态良好。

翻译自: https://www.javacodegeeks.com/2016/02/look-upcoming-jsf-2-3-push-support.html

看一下即将发布的JSF 2.3 Push支持相关推荐

  1. web.xml.jsf_看一下即将发布的JSF 2.3 Push支持

    web.xml.jsf 如前几篇文章所述,下一版本的JavaServer Faces(Mojarra)已添加了许多增强功能. JSF 2.3计划于2017年与Java EE 8一起发布,但是您现在可以 ...

  2. 全球区块链第22周看点 | b1账号成RAM首富,EOS神秘新产品即将发布

    TokenInsight整理了5月25日-6月1日,区块链行业在底层公链.监管.行业发展.稳定币.应用落地.资产管理.交易所方面发生的大事件,并对此进行了点评. 本周值得关注的内容 TokenInsi ...

  3. 华为: 即将发布5G+VR的颠覆式智能眼镜

    来源:VR每日必看 6月27日MWC19上海期间,华为手机业务总裁何刚在全球终端峰会发表演讲,提及华为终端在5G时代的全场景战略是"1+8+N"."1"就是华为 ...

  4. 修改节点大小_重磅前瞻!K8S 1.18即将发布:OIDC发现、Windows节点支持,还有哪些新特性值得期待?...

    根据Kubernetes官方计划,明日Kubernetes 1.18版本即将发布! 一些将对社区产生影响的新特性日渐完善,如 KSA(Kubernetes Service Account) token ...

  5. apache.camel_在即将发布的Camel 2.21版本中改进了使用Apache Camel和ActiveMQ Artemis处理大型消息的功能...

    apache.camel 从历史上看, Apache ActiveMQ消息代理最初是在大型消息以MB为单位而不是GB的情况下创建的,就像您今天所做的那样. 下一代代理Apache ActiveMQ A ...

  6. 在即将发布的Camel 2.21版本中改进了使用Apache Camel和ActiveMQ Artemis处理大型消息的功能...

    从历史上看, Apache ActiveMQ消息代理最初是在大型消息以MB为单位而不是GB的情况下创建的,就像您今天所做的那样. 下一代代理Apache ActiveMQ Artemis(或仅是Art ...

  7. 飞思卡尔imx7 html5,i.MX6UL 飞思卡尔即将发布基于ARM Cortex-A7核心的低功耗处理器 i.MX 6UltraLite Processor...

    i.MX6UL 飞思卡尔即将发布基于ARM Cortex-A7核心的低功耗处理器 i.MX 6UltraLite Processor Freescale飞思卡尔即将于7月份发布全新的基于ARM Cor ...

  8. iPhone 13的新对手?小米历史上最好看的手机即将发布

    小米即将在9月27日推出小米手机历史上最好看的一个系列--全新的Xiaomi Civi系列手机. 从官方同步晒出的官方渲染图显示,该机正面还将采用超窄边框的曲面显示屏,视觉效果非常出色,并且拥有&qu ...

  9. Windows 11 即将发布,微软“强推” Edge 浏览器?

    作者 | 苏宓 出品 | CSDN(ID:CSDNnews) 25 年前,浏览器之争初起,IE 与网景(Netscape)"大战"四年,最终以网景被 AOL 收购.IE 市场份额节 ...

最新文章

  1. WebRTCon 2018 Day Two精彩回顾
  2. mil跟踪算法matlab,几种目标跟踪算法性能比较
  3. 唤起那些年你对IDL的记忆(二)
  4. echart仪表盘旋转_使用echart仪表盘
  5. 金融数据分析与挖掘实战 4.2 Matplotlib(二)
  6. 全自动高清录播服务器,全自动高清录播服务器 高清录播系统 一体化操作;易使用 操作简便...
  7. 敏感词的字典树匹配(lua版)
  8. js事件冒泡和事件捕获的区别
  9. 防止ARP欺骗的方法
  10. pyqt5设置dialog的标题_PyQt5教程——对话框(6)
  11. AB1562_UT软件分辨真假洛达1562A,洛达1562a怎么鉴别?
  12. win10小课堂:必须掌握的十个电脑使用技巧
  13. 华为USG6000v防火墙双机热备综合实验
  14. oracle SCAN
  15. 汉字拼音互相转换工具类
  16. 如何看懂congestion map
  17. 实现isodd() 参数为整数,如果整数为基数,返回True 否则返回False
  18. 判断Linux环境是否装了NCCL,安装cuDNN和NCCL指南
  19. 装PDF应用软件重启计算机,Win10每次将PDF默认打开方式设为其他软件,第二天总会改回Edge?...
  20. 网站SEO怎么让网站收录翻倍,提升网站收录率

热门文章

  1. 高级 Java 面试通关知识点整理
  2. c语言程序设计--图书管理系统
  3. 安装windows 10操作系统
  4. 无缝滚动图片——源码
  5. Mybatis框架的连接池配置
  6. android 监听安装来源_Flutter插件开发之APK自动安装
  7. tomcat(2)一个简单的servlet容器
  8. XML——StAX Streaming API for XML(read+write)
  9. spring框架介绍_Spring框架介绍
  10. streaming api_通过Spring Integration消费Twitter Streaming API