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

10年的德城網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整德城建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“德城網(wǎng)站設(shè)計(jì)”,“德城網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
我將為您展示如何使用 Seam Remoting API 和 Ajax JSF 組件來協(xié)助基于 JSF 應(yīng)用程序中的 Ajax 風(fēng)格的交互。正如您將會看到的,結(jié)合 Seam 和 Ajax 的***好處在于它讓您可以享用所有 Web 2.0 的奢侈東西,而同時(shí)又不需要陷于使用 JavaScript XMLHttpRequest 對象的痛苦之中。借助 Seam Remoting 和 Ajax JSF,可以與服務(wù)器上的受管 bean 通信,就好像這些 bean 與瀏覽器同在本地一樣。瀏覽器和服務(wù)器狀態(tài)保持同步,而且永遠(yuǎn)無需處理促成它們之間通信的低層 API。
我首先會為您展示 Seam 是如何推動(dòng) Ajax 編程的基于組件的新方式的。您將學(xué)會如何使用 Seam Remoting API 來通過 Ajax 進(jìn)行 JavaScript 和服務(wù)器端對象間的通信。一旦理解了這種面向 Ajax 的新(且簡單的)方式,您就可以使用它來增強(qiáng) Open 18 應(yīng)用程序,方法如下:
在 Open 18 球場目錄和 Google Maps 之間創(chuàng)建一個(gè) 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)用程序時(shí),您需要進(jìn)行一些 JavaScript 編碼,但與大多數(shù) Ajax 實(shí)現(xiàn)不同,JavaScript 并不會占據(jù)您代碼中的大部分; 相反,它只擴(kuò)展了服務(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è)計(jì)。為了保持處理 Ajax 的這種抽象性,您可以將低層的這些瑣碎工作交由 Seam Remoting 或 Ajax JSF 處理。這兩個(gè)庫均可負(fù)責(zé)通過 Ajax 交互將 JSF 組件熔合到瀏覽器時(shí)所需的管道處理。當(dāng)事件觸發(fā)時(shí),比如用戶單擊了一個(gè)按鈕,消息就會異步發(fā)送給服務(wù)器上的組件。一旦收到響應(yīng),它就會用來對此頁進(jìn)行增量更新。用來處理瀏覽器和服務(wù)器端組件間的交互的低層通信協(xié)議都藏于 API 之后。
用戶能看到單擊按鈕后所發(fā)生的方法調(diào)用的結(jié)果。在研究此用例時(shí),有兩個(gè)要點(diǎn)需要注意: (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 是兩個(gè)獨(dú)特的庫,可分別服務(wù)于 JSF 的 “Ajax 化” 的目的。兩個(gè)庫均使用 Ajax 來引入交互模型,其中瀏覽器和服務(wù)器間的通信可以在后臺異步發(fā)生,并對用戶不可見。沒有必要為了執(zhí)行服務(wù)器上的方法而浪費(fèi)用戶頁面重載的時(shí)間。在這些庫所發(fā)出的 Ajax 請求中由服務(wù)器檢索到的信息可用來增量地 “實(shí)時(shí)” 更新頁面的狀態(tài)。兩個(gè)庫均可配備生命周期,此生命周期可以在瀏覽器需要的時(shí)候恢復(fù)(restore)組件的狀態(tài)。這種 Ajax 交互并不是真的請求而是一種 “恢復(fù)并執(zhí)行”。瀏覽器像是 “敲敲” 服務(wù)器的 “肩膀”,請它在服務(wù)器端的一個(gè)受管 bean 上執(zhí)行一個(gè)方法并返回結(jié)果。
雖然這兩個(gè)庫工作起來有些差別,但它們并不是相互排斥的。由于它們都采用的是 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,但您無需費(fèi)心數(shù)據(jù)包如何傳輸?shù)募?xì)節(jié)。
Ajax JSF 則通過完全隱藏 JavaScript 的使用讓抽象更進(jìn)了一步。它將所有邏輯都包裹在基本 UI 組件內(nèi)。Ajax JSF 通過完整的 JSF 生命周期接受 Ajax 請求。因而,支持 Ajax 的組件可以在不觸發(fā)瀏覽器導(dǎo)航事件的前提下執(zhí)行動(dòng)作處理程序、升級 JSF 組件樹以及重新呈現(xiàn)該頁的某些部分。同樣地,通信也是通過 Ajax 實(shí)現(xiàn)的,但所有這些均在后臺發(fā)生,頁面開發(fā)人員不可見。Ajax JSF 面向組件的方法讓 Ajax 功能得以成為 JSF 很自然的一部分,而不是格格不入的外來者。
我將深入探究這些方式,但我們還是先來看看 Ajax 的基礎(chǔ)知識吧。
【編輯推薦】
- 程序員必備Java API
- 對于JSF的一些思考
- 從JSF的切入點(diǎn)控制JSF
- 幾個(gè)JSF流行名詞的解釋
- 淺談JSF的UI組件
分享題目:構(gòu)建AjaxJSF事件驅(qū)動(dòng)
網(wǎng)站地址:http://fisionsoft.com.cn/article/ccedocd.html


咨詢
建站咨詢
