日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

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

發布時間:2023/12/3 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 看一下即将发布的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函數在連接關閉時執行。 在以下示例中,我們指定套接字將與名為dukeSocketListener的onmessage偵聽器連接到名為“ 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:websocket的onmessage屬性指定的客戶端上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支持的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。