溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何構(gòu)建Ajax JSF事件驅(qū)動

發(fā)布時間:2021-07-14 10:43:06 來源:億速云 閱讀:154 作者:chen 欄目:編程語言

本篇內(nèi)容介紹了“如何構(gòu)建Ajax JSF事件驅(qū)動”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

時下,大多數(shù) Java 開發(fā)人員都很看好 mashup,所以您可能會困惑:Seam 與號稱 Web 2.0 的技術(shù),尤其是 Ajax,如何能集成。若能使用 Seam 啟動 JSF 中的部分頁面更新或者用 Google Map 協(xié)助 JSF 應(yīng)用程序 mashup,那將非???,不是么?您不僅能這么做,而且還非常容易。

我將為您展示如何使用 Seam Remoting API 和 Ajax JSF 組件來協(xié)助基于 JSF 應(yīng)用程序中的 Ajax 風(fēng)格的交互。正如您將會看到的,結(jié)合 Seam 和 Ajax 的***好處在于它讓您可以享用所有 Web 2.0 的奢侈東西,而同時又不需要陷于使用 JavaScript XMLHttpRequest 對象的痛苦之中。借助 Seam Remoting 和 Ajax JSF,可以與服務(wù)器上的受管 bean 通信,就好像這些 bean 與瀏覽器同在本地一樣。瀏覽器和服務(wù)器狀態(tài)保持同步,而且永遠(yuǎn)無需處理促成它們之間通信的低層 API。

我首先會為您展示 Seam 是如何推動 Ajax 編程的基于組件的新方式的。您將學(xué)會如何使用 Seam Remoting API 來通過 Ajax 進(jìn)行 JavaScript 和服務(wù)器端對象間的通信。一旦理解了這種面向 Ajax 的新(且簡單的)方式,您就可以使用它來增強 Open 18 應(yīng)用程序,方法如下:

在 Open 18 球場目錄和 Google Maps 之間創(chuàng)建一個 mashup。
使用 Ajax JSF 合并應(yīng)用程序的球場目錄頁和球場細(xì)節(jié)頁。
重新訪問應(yīng)用程序的 Spring 集成并讓 Spring bean 在 Seam Remoting 的生命周期可用。

Open 18 和 Google Maps 之間的 mashup 讓用戶可以定位地圖中的高爾夫球場目錄中的位置。將此球場目錄和球場細(xì)節(jié)頁合并起來(并將低層代碼 Ajax 化)可以讓您顯示球場的細(xì)節(jié)信息而無需加載新頁。將 Spring bean 和 Seam Remoting 相集成讓您可以捕獲 Google Maps 位置標(biāo)記的重定位并能將相關(guān)球場的經(jīng)度和緯度存儲到數(shù)據(jù)庫中。如您所見,結(jié)果就是會產(chǎn)生所有高爾夫球員都喜歡使用的 Web 2.0 風(fēng)格的應(yīng)用程序,這真是讓人印象深刻!

如果您曾經(jīng)深受涉及到大量 JavaScript 的過于復(fù)雜的 Ajax 編程之苦,如果到目前為止,您都由于不想面對其復(fù)雜性而一直盡量避免使用 Ajax,那么本文所要教授的內(nèi)容將會幫助您免除這種擔(dān)心。在重構(gòu)應(yīng)用程序時,您需要進(jìn)行一些 JavaScript 編碼,但與大多數(shù) Ajax 實現(xiàn)不同,JavaScript 并不會占據(jù)您代碼中的大部分; 相反,它只擴展了服務(wù)器端的 Java 對象。

通向 Ajax 的不同之路

正如在應(yīng)用程序中希望避免顯式的內(nèi)存管理一樣,您亦不 希望必須要處理低層的 Ajax 請求協(xié)議。這么做只會帶來更大的麻煩(更確切地說,是更多的麻煩),比如多瀏覽器支持、數(shù)據(jù)封送處理、并發(fā)沖突、服務(wù)器負(fù)載以及定制 servlet 和 servlet 過濾器。其中您想要避免的***的麻煩是無意間公開的無狀態(tài)的請求-響應(yīng)范例,但該范例是基于組件的框架,比如 JSF,所想要隱藏的。

JSF 生命周期通過對底層的 servlet 模型屏蔽應(yīng)用程序代碼促進(jìn)了面向組件的設(shè)計。為了保持處理 Ajax 的這種抽象性,您可以將低層的這些瑣碎工作交由 Seam Remoting 或 Ajax JSF 處理。這兩個庫均可負(fù)責(zé)通過 Ajax 交互將 JSF 組件熔合到瀏覽器時所需的管道處理。當(dāng)事件觸發(fā)時,比如用戶單擊了一個按鈕,消息就會異步發(fā)送給服務(wù)器上的組件。一旦收到響應(yīng),它就會用來對此頁進(jìn)行增量更新。用來處理瀏覽器和服務(wù)器端組件間的交互的低層通信協(xié)議都藏于 API 之后。

用戶能看到單擊按鈕后所發(fā)生的方法調(diào)用的結(jié)果。在研究此用例時,有兩個要點需要注意: (1) 該頁永遠(yuǎn)無法刷新; (2) 客戶端代碼與組件上的方法進(jìn)行透明通信,而不是顯式地構(gòu)建然后再請求 URL。標(biāo)準(zhǔn)的 HTTP 請求在后臺使用,但客戶端代碼永遠(yuǎn)無需直接與 HTTP 協(xié)議交互。

Seam Remoting 和 Ajax JSF

Seam Remoting 和 Ajax JSF 是兩個獨特的庫,可分別服務(wù)于 JSF 的 “Ajax 化” 的目的。兩個庫均使用 Ajax 來引入交互模型,其中瀏覽器和服務(wù)器間的通信可以在后臺異步發(fā)生,并對用戶不可見。沒有必要為了執(zhí)行服務(wù)器上的方法而浪費用戶頁面重載的時間。在這些庫所發(fā)出的 Ajax 請求中由服務(wù)器檢索到的信息可用來增量地 “實時” 更新頁面的狀態(tài)。兩個庫均可配備生命周期,此生命周期可以在瀏覽器需要的時候恢復(fù)(restore)組件的狀態(tài)。這種 Ajax 交互并不是真的請求而是一種 “恢復(fù)并執(zhí)行”。瀏覽器像是 “敲敲” 服務(wù)器的 “肩膀”,請它在服務(wù)器端的一個受管 bean 上執(zhí)行一個方法并返回結(jié)果。

雖然這兩個庫工作起來有些差別,但它們并不是相互排斥的。由于它們都采用的是 JSF 組件模型,所以二者可以很容易地相互結(jié)合,這將在本文后面的部分詳細(xì)介紹。目前,我們只需分別考慮二者各自將 Ajax 風(fēng)格的交互引入 JSF 應(yīng)用程序的方式:

Seam Remoting 提供了 JavaScript API,可以使用這些 API 來像訪問本地對象一樣來訪問 JavaScript 中的服務(wù)器端組件,以便通過方法調(diào)用發(fā)送和檢索數(shù)據(jù)。Seam Remoting 使用定制的、非 JSF 生命周期來使該瀏覽器能夠與服務(wù)器端的組件通信。只有 Seam 容器和其組件可以在這些請求期間被恢復(fù)。透明協(xié)議是 Ajax,但您無需費心數(shù)據(jù)包如何傳輸?shù)募?xì)節(jié)。

Ajax JSF 則通過完全隱藏 JavaScript 的使用讓抽象更進(jìn)了一步。它將所有邏輯都包裹在基本 UI 組件內(nèi)。Ajax JSF 通過完整的 JSF 生命周期接受 Ajax 請求。因而,支持 Ajax 的組件可以在不觸發(fā)瀏覽器導(dǎo)航事件的前提下執(zhí)行動作處理程序、升級 JSF 組件樹以及重新呈現(xiàn)該頁的某些部分。同樣地,通信也是通過 Ajax 實現(xiàn)的,但所有這些均在后臺發(fā)生,頁面開發(fā)人員不可見。Ajax JSF 面向組件的方法讓 Ajax 功能得以成為 JSF 很自然的一部分,而不是格格不入的外來者。

我將深入探究這些方式,但我們還是先來看看 Ajax 的基礎(chǔ)知識吧。

“如何構(gòu)建Ajax JSF事件驅(qū)動”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI