浙江网站建设营销,新华社两学一做网站,网站建设栏目内容,wordpress建站不懂程序如前几篇文章所述#xff0c;下一版本的JavaServer Faces#xff08;Mojarra#xff09;已添加了许多增强功能。 JSF 2.3计划于2017年与Java EE 8一起发布#xff0c;但是您现在可以通过从源代码构建或运行里程碑版本来尝试JSF的一些增强和更新#xff0c;以进行测试。 对… 如前几篇文章所述下一版本的JavaServer FacesMojarra已添加了许多增强功能。 JSF 2.3计划于2017年与Java EE 8一起发布但是您现在可以通过从源代码构建或运行里程碑版本来尝试JSF的一些增强和更新以进行测试。 对API的此类增强之一是通过f:websocket标签和Push API添加了基于单向服务器到客户端的websocket推送通信。 OmniFaces团队开发了基于osocket的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-paramparam-namejavax.faces.ENABLE_WEBSOCKET_ENDPOINT/param-nameparam-valuetrue/param-value/context-param客户端代码 在您的客户端JSF视图上添加f:websocket标记并指定要连接的通道。 您还必须指定一个onmessage侦听器该侦听器将在收到消息后执行指定JavaScript函数。 还可以指定可选属性onclose 以允许指定JavaScript函数在连接关闭时执行。 在以下示例中我们指定套接字将与名为dukeSocketListener的onmessage侦听器连接到名为“ duke”的通道 f:websocket channelduke onmessagedukeMessageListener/ 可以使用三个参数推送消息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:websocket的onmessage属性指定的客户端上JavaScript函数的message参数。 可以发送任何类型的容器作为消息可以是普通的StringJavaBeanMapCollection等。 用法示例 假设我们有一个用于Web应用程序的管理控制台并且我们想为管理员提供一种向客户端发出警报的方法。 这样管理控制台可以具有用于消息输入的文本区域以及用于调用消息发送的命令按钮。 h:inputText idpushMessage value#{testBean.pushMessage}/
h:commandButton action#{testBean.sendAdminMessage} valueSend 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 channelduke onmessagedukeMessageListener/p:growl idmessages/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