web.xml.jsf

如前几篇文章所述,下一版本的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属性以指示要@Push发送消息的通道该消息应广播。

@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

web.xml.jsf

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

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

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

  2. web.xml.jsf_面向初学者的JSF 2.0教程

    web.xml.jsf 1.什么是JSF? JSF是Java Server Faces的首字母缩写. 它是一种服务器端处理技术,它允许将服务器端代码嵌入到网页中. 由于可以将服务器端处理和渲染代码嵌入 ...

  3. web.xml.jsf_使用JSF 2.2功能来开发可滚动,可延迟加载的Ajax数据表

    web.xml.jsf 这次,我想与您分享我最近从JSF 2.2功能中学到的知识. 为此,我决定创建一个简单的ajax,可滚动,延迟加载的数据表. 请注意, 绝不这是相当大的库如Primefaces ...

  4. web.xml.jsf_使用JSF 2.0可以更轻松地进行多字段验证

    web.xml.jsf 开发应用程序表单时最常见的需求之一是多字段验证(或跨字段验证,但我没有使用此术语,因为当我将其放在Google上时,实际上得到了一些战后图片). 我正在谈论的情况是,我们需要比 ...

  5. maven web项目中的web.xml的版本如何更改

    maven web项目中的web.xml的版本如何更改 问题 因web.xml的版本太低不支持el表达式的问题(maven3.6版本通过底层的maven web插件生成的最终的web.xml文件版本只 ...

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

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

  7. 关于j2ee工程发布到was上后,部分更新,例修改web.xml配置文件不起作用的原因解析【转】...

    在WAS中,应用的配置是从config/cells....目录下读取:而资源从/installedApps目录下读取 故当配置文件(例web.xml)发生改变时,只更新应用程序资源文件/install ...

  8. Spring揭秘--寻找遗失的web.xml

    今天我们来放松下心情,不聊分布式,云原生,来聊一聊初学者接触的最多的 java web 基础.几乎所有人都是从 servlet,jsp,filter 开始编写自己的第一个 hello world 工程 ...

  9. Stuts的Web.xml 详解

    1 定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出文件的字符编码. DOCYTPE声明必须立即出现在此头之后.这个声明告诉服务器适用 ...

最新文章

  1. 两个形状不同的长方形周长_借助思维导图玩转小学阶段三种不同计算图形周长的方法!...
  2. 桌面虚拟化之远程协助
  3. HTTP中response响应数据获取
  4. Shell通过过滤条件(比如IP)分类流量包,最后合并流量包
  5. 一笔订单,但是误付了两笔钱!这种重复付款异常到底该如何解决?
  6. ajax context this,如何使ajax里的this指向不改变
  7. 全栈工程师的3个关键技能是什么?
  8. express入门学习(一)
  9. 遗传算法matlab_当结构设计遇到遗传算法应用ANSYS和MATLAB联合优化设计探索(二)...
  10. 产品经验谈:什么是用户画像?用户画像的一些应用案例
  11. 5g网络测试用什么软件,5G网络测速
  12. This scheduler instance is still active but was recovered by another instanc解决办法
  13. [cryptoverse ctf 2022] cvctf
  14. Git 安装win7
  15. 字符串判断相等和不相等
  16. PPT批量修改所有字体
  17. 模拟电路设计(30)---数字滤波器简介
  18. 干货|红蓝攻防实战演练技术汇总
  19. ubuntu java 无法运行,无法使用ubuntu运行java gui程序
  20. 5G的到来,意味着什么?

热门文章

  1. P7717-「EZEC-10」序列【Trie】
  2. 2020牛客NOIP赛前集训营-提高组(第三场)C-牛半仙的妹子Tree【虚树,最短路】
  3. 【2018.3.31】模拟赛之四-ssl2408 句子【dp,字符串】
  4. codeforces438 D. The Child and Sequence
  5. 洛谷-P3203 弹飞绵羊 分块
  6. 2017西安交大ACM小学期数论 [更新学号]
  7. 4、mysql数据库的权限管理
  8. springboot手动提交kafka offset
  9. Redis进阶之主从复制
  10. 并发编程 – Concurrent 用户指南