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

如前几篇文章所述,下一版本的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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354909.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java mvc中重复提交表单,spring mvc 防止重复提交表单的两种方法,推荐第二种

第一种方法&#xff1a;判断session中保存的token比较麻烦&#xff0c;每次在提交表单时都必须传入上次的token。而且当一个页面使用ajax时&#xff0c;多个表单提交就会有问题。注解Token代码&#xff1a;package com.thinkgem.jeesite.common.repeat_form_validator;import j…

3415 最小和

3415 最小和 链接&#xff1a;http://codevs.cn/problem/3415/ CodeVS原创 时间限制: 1 s空间限制: 64000 KB题目描述 Description小浣熊松松来到文具店&#xff0c;选择了K支自己喜欢的水彩笔&#xff0c;并抄下了它们的价格。可是到结算时&#xff0c;他发现自己抄价格时抄…

java监控rabbitMq服务状态,SpringCloud-Turbine【RabbitMQ服务监控】

前面我们介绍了通过turbine直接聚合多个服务的监控信息&#xff0c;实现了服务的监控&#xff0c;但是这种方式有个不太好的地方就是turbine和服务的耦合性太强了&#xff0c;针对这个问题&#xff0c;我们可以将服务的监控消息发送到RabbitMQ中&#xff0c;然后turbine中Rabbi…

SVN提示被锁定的解决方法(转)

1、&#xff08;常用&#xff09;出现这个问题后使用“清理”即"Clean up"功能&#xff0c;如果还不行&#xff0c;就直接到上一级目录&#xff0c;再执行“清理”&#xff0c;然后再“更新”。 2、&#xff08;没试过&#xff09;有时候如果看到某个包里面的文件夹没…

jpa 查询 列表_终极JPA查询和技巧列表–第1部分

jpa 查询 列表我们可以在Internet上找到一些JPA“如何做”&#xff0c;在本博客的此处&#xff0c;教您如何使用JPA执行多项任务。 通常&#xff0c;我看到有人问有关使用JPA进行查询的问题。 通常&#xff0c;为了回答此类问题&#xff0c;提供了几个链接以尝试找到该问题的解…

windows下php swoole扩展,Windows 下安装 swoole 图文教程(php)

Windows 下安装 swoole 具体步骤&#xff1a;Swoole,原本不支持在Windows下安装的&#xff0c;所以我们要安装Cygwin来使用。在安装Cygwin下遇到了很多坑&#xff0c;百度经验上的文档不是很全&#xff0c;所以我把自己安装Cygwin和Swoole写下来相当于对自己的沉淀吧。首先准备…

软件工程实践2017第一次作业

&#xff08;1&#xff09;回想一下你初入大学时对计算机专业的畅想 当初你是如何做出选择计算机专业的决定的&#xff1f; 高考之后&#xff0c;综合分数、地理位置、专业考虑&#xff0c;搭上了福州大学这趟动车&#xff0c;不过选报的专业给我打了个折&#xff0c;意外的在生…

将JQGrid与Spring MVC和Gson集成

我在一个单页面应用程序上工作&#xff0c;我想在使用Spring MVC的应用程序的一部分中使用网格功能。 自从我上次使用JQGrid以来已经有一段时间了&#xff0c;找到让我起床所需的信息有点困难。 在这篇文章中&#xff0c;我想整理所有信息并将其放入教程中以供遵循&#xff0c;…

php文件写入加1,PHP关于文件与目录(1) 写入文件 文件权限 三、锁定文件

一、文件权限总之一切都是为了保证目录的安全&#xff0c;保证目录的安全比保证文件的安全更重要。二、写入文件file_put_contents($file,$data); //如果没有的话会创建&#xff0c;有的话覆盖原文件&#xff1b;file_put_contents($file,$data,FILE_APPEND); //没的话会创建&a…

DB2 SQL性能调优秘笈pdf

下载地址&#xff1a;网盘下载 简介编辑《DB2 SQL性能调优秘笈》是一本不可多得的DB2数据库性能调优秘笈&#xff0c;由拥有20余年DB2工作经验的资深数据库专家撰写&#xff0c;Amazon全五星评价畅销书。《DB2 SQL性能调优秘笈》不仅详尽阐述了100余条SQL语句优化的技巧和最佳实…

matlab点到曲线的距离视频,使用MATLAB计算点到直线距离

给定平面上 x1, x2, x3三个点&#xff0c;求x1到x2、x3之间的直线的距离。我是用的是内积的方法求解&#xff0c;依据原理是使用内积求出直线x2x1 与 直线x3x1的夹角cos值&#xff0c;进而求出sin值&#xff0c;再求出x1到x2x3的距离。这种方法的不足之处是&#xff0c;当三点之…

新CalendarFX视图:MonthGridView!

我和我的团队最近开始为CalendarFX创建新视图&#xff0c;其最初目标是在垂直列中显示整年。 该视图的名称是MonthGridView。 像往常一样&#xff0c;编码时目标略有变化。 该视图现在可以显示任意数量的月份&#xff0c;并且可以在前面或后面添加额外的月份。 现在&#xff0c…

php如何和c进行数据交换,PHP与 后台c交换数据 | 学步园

为什么要用json跟XML相比&#xff0c;JSON的优势在于格式简洁短小&#xff0c;特别是在处理大量复杂数据的时候&#xff0c;这个优势便显得非常突出。从各浏览器的支持来看&#xff0c;JSON解决了因不同浏览器对XML DOM解析方式不同而引起的问题。目前&#xff0c;JSON已经成为…

1 课外笔记之网页动画——jsp系列问题

1.直接用记事本进行网页的编写&#xff0c;代码中还有中文&#xff0c;用网页打开后&#xff0c;会导致中文部分出现乱码问题。 解决办法&#xff1a; 1.保存为utf-8编码&#xff0c;保存为gbk编码 2.添加一行代码&#xff1a;<meta http-equiv"Content-Type" con…

php while结束循环吗,php while循环退不出是什么有关问题

php while循环退不出是什么问题&#xff1f;include(include/config.php);include(include/dbclass.php);session_start();$db db::getInstance();// $db->check_user_login(); //检查用户是否登录$db->createcon(); //建立连接// $user$_SESSION["u…

8月31日笔记

1、http返回码200、302、304、404、500的含义 2、mybatis中插入记录时获取主键 3、sql&#xff0c;如何查询两个包含两个不同列的结果 4、sql&#xff0c;如何把邮箱中的139.com替换为qq.com 5、sql&#xff0c;如何获取姓名中的姓&#xff0c;并且统计每一个姓的数量 6、还有四…

硒测试的干净架构

在这篇博客文章中&#xff0c;我想介绍一种具有最佳设计模式的Selenium测试的简洁架构&#xff1a;页面对象&#xff0c;页面元素&#xff08;通常称为HTML包装器&#xff09;和自行开发的非常小巧的框架。 该体系结构不限于示例中使用的Java&#xff0c;也可以以任何其他语言应…

ThinkPHP5 封装邮件发送服务(可发附件)

1、Composer 安装 phpmailer 1composer require phpmailer/phpmailer2、ThinkPHP 中封装邮件服务类 我把它封装在扩展目录 extend/Mail.php 文件里&#xff0c;内容如下&#xff1a; 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748…

php中如何定义常量和变量的区别,php define常量定义与变量区别

常量在使用前必须要定义&#xff0c;否则程序执行会出错。在php中使用define()函数来定义常量。1、语法格式&#xff1a;define("常量名称","常量的值");例如&#xff1a;define("php360","完美的php");下面还是来一个范例吧&#xff…

PHP小语种网站开发,当阳小语种建站

当阳小语种建站&#xff0c;六脉(LIUMAI)&#xff0c;专注于帮助中小企业开拓海外市场获取外贸订单&#xff0c;提供外贸整体解决方案。当阳小语种建站&#xff0c; 拥有强大的搜索引擎优化功能&#xff0c;通过操作全球贸易通后台可以轻松实现对英语及小语种网站的搜索优化&am…