日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

發(fā)布時(shí)間:2023/12/3 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 看一下即将发布的JSF 2.3 Push支持 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如前幾篇文章所述,下一版本的JavaServer Faces(Mojarra)已添加了許多增強(qiáng)功能。 JSF 2.3計(jì)劃于2017年與Java EE 8一起發(fā)布,但是您現(xiàn)在可以通過從源代碼構(gòu)建或運(yùn)行里程碑版本來嘗試JSF的一些增強(qiáng)和更新,以進(jìn)行測試。

對(duì)API的此類增強(qiáng)之一是通過f:websocket標(biāo)簽和Push API添加了基于單向(服務(wù)器到客戶端)的websocket推送通信。 OmniFaces團(tuán)隊(duì)開發(fā)了基于o:socket的JSF解決方案,該解決方案是OmniFaces實(shí)用程序庫的一部分。 具體來說,JSR 372專家組成員Bauke Scholtz和Arjan Tijms對(duì)Mojarra代碼庫做出了此以及許多其他增強(qiáng)和修復(fù)。

啟用f:websocket支持的補(bǔ)丁尚未應(yīng)用于Mojarra 2.3分支,但是您可以從發(fā)行版JAVASERVERFACES_SPEC_PUBLIC-1396獲得補(bǔ)丁。 在將修補(bǔ)程序應(yīng)用于本地Mojarra克隆之前,應(yīng)確保從中央2.3分支更新源,以確保已應(yīng)用最新更新。 用法很簡單,非常類似于OmniFaces站點(diǎn)上有據(jù)可查的o:socket功能,請(qǐng)執(zhí)行以下步驟來使用f:websocket 。

首先,添加

javax.faces.ENABLE_WEBSOCKET_ENDPOINT

應(yīng)用程序的web.xml的context參數(shù),并將其值設(shè)置為true。

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

客戶端代碼

在您的客戶端(JSF視圖)上,添加f:websocket標(biāo)記,并指定要連接的通道。 您還必須指定一個(gè)onmessage偵聽器,該偵聽器將在收到消息后執(zhí)行指定JavaScript函數(shù)。 還可以指定可選屬性onclose ,以允許指定JavaScript函數(shù)在連接關(guān)閉時(shí)執(zhí)行。 在以下示例中,我們指定套接字將與名為dukeSocketListener的onmessage偵聽器連接到名為“ duke”的通道:

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

可以使用三個(gè)參數(shù)(推送消息JSON對(duì)象,通道名稱,消息事件)調(diào)用onmessage偵聽器。 如果您只是希望傳遞一條消息,它可能類似于以下內(nèi)容:

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

如果指定了可選的onclose偵聽器,則相應(yīng)的函數(shù)可以接受三個(gè)參數(shù)(關(guān)閉原因碼–整數(shù),通道名稱,消息事件),但僅需要第一個(gè)。

在大多數(shù)情況下,其目的是向服務(wù)器發(fā)送一條消息,以通知具有相同websocket通道規(guī)范的所有客戶端視圖。 f:websocket上有一個(gè)可選的scope屬性,可以將其設(shè)置為“ session”,這會(huì)將消息限制為僅在當(dāng)前會(huì)話中使用相同websocket通道的所有客戶端視圖。

最后,如果需要,可以將可選port屬性設(shè)置為指定除HTTP端口以外的TCP端口號(hào)。

服務(wù)器端代碼

由于我們計(jì)劃將消息從服??務(wù)器推送到所有連接的客戶端,因此讓我們看一下服務(wù)器端代碼。 可以通過包含@Push批注將新的PushContext注入到任何CDI工件中,并且上下文名稱可以對(duì)應(yīng)于通道名稱,或者可以在@Push批注上指定可選的channel屬性以指示要訪問的通道該消息應(yīng)廣播。

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

該消息將被編碼為JSON,并傳遞到為f:websocket的onmessage屬性指定的客戶端上JavaScript函數(shù)的message參數(shù)。 可以發(fā)送任何類型的容器作為消息,可以是普通的String,JavaBean,Map,Collection等。

用法示例

假設(shè)我們有一個(gè)用于Web應(yīng)用程序的管理控制臺(tái),并且我們想為管理員提供一種向客戶端發(fā)出警報(bào)的方法。 這樣,管理控制臺(tái)可以具有用于消息輸入的文本區(qū)域,以及用于調(diào)用消息發(fā)送的命令按鈕。

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

然后,JSF控制器類testBean將具有sendAdminMessage方法,該方法將存儲(chǔ)在pushMessage字符串中的消息發(fā)送到我們的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); }

任何將收到消息的客戶端都應(yīng)包含f:websocket標(biāo)記,指向duke通道。 客戶端還應(yīng)該至少包括在收到消息時(shí)要調(diào)用JavaScript函數(shù)。

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

在此特定示例中,PrimeFaces咆哮消息組件將在收到消息時(shí)進(jìn)行更新。

由于JSR 372專家組成員的所有杰出貢獻(xiàn),JSF 2.3的狀態(tài)良好。

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

總結(jié)

以上是生活随笔為你收集整理的看一下即将发布的JSF 2.3 Push支持的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。