JSF 2 簡介,第 1 部分: 流線化 Web 應用程序開發使用 JSF 2 簡化導航、免除 XML 配置并輕松訪問資源 |
|
|
|
級別: 中級 David Geary , 總裁, Clarity Training, Inc. 2009 年 6 月 15 日 隨著 2.0 版本的發布,Java?Server Faces (JSF) 現在可以輕松地實現健壯的、Ajax 風格的 Web 應用程序。本文是共三部分的系列文章的開篇,JSF 2.0 專家組成員 David Geary 將展示如何利用 JSF 2 中的新特性。在這期文章中,您將了解到如何使用 JSF 2 流線化開發,您將使用注釋和約定代替 XML 配置,簡化導航,并輕松訪問資源。并且您將看到如何在您的 JSF 應用程序中使用 Groovy。<!-- START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --> <!-- END RESERVED FOR FUTURE USE INCLUDE FILES--> 有關 Web 應用程序框架的最佳發源地,人們一直爭論不休:是象牙塔(由理論家空想而來)還是現實世界。在后一種情況下,框架的誕生經受了實際需求的嚴酷考驗。憑直覺判斷,經受了實際需求的考驗要勝過理論家的空想,并且我認為這種直覺完全經得起更進一步的檢驗。 JSF 1 就是在象牙塔中開發的,因此,它的出現并沒有引起太大的轟動。但是,JSF 做對了一件事情 — 它使市場上出現了大量來自實際開發的創新。早些時候,Facelets 的初次登場成為了 JavaServer Pages (JSP) 的強有力候補。然后出現了 Rich Faces,一個出色的 JSF Ajax 庫;接著是 ICEFaces,將 Ajax 和 JSF 聯合起來的新穎方法;還有 Seam、Spring Faces、Woodstock 組件、JSF Templating,等等。所有這些開源 JSF 項目都是由開發人員根據自己需要的功能構建的。 JSF 2.0 專家組實際上對來自這些開源項目的最佳特性進行了標準化。盡管 JSF 2 規范確實是由一些理論家編寫的,但它也受到了來自實際開發的創新的驅動。回想起來,專家組的工作其實非常輕松,因為我們正站在巨人的肩膀上,比如 Gavin King (Seam)、Alexandr Smirnov (Rich Faces)、Ted Goddard (ICEFaces) 和 Ken Paulson (JSF Templating)。實際上,所有這些巨人都是 JSF 2 專家組的成員。因此,JSF 2 在許多方面都結合了象牙塔和真實世界的長處。并且它展示了這一點。JSF 2 是對 JSF 1 的重大改進。 本文是共三部分的系列文章的開篇,主要有兩個目標:展示激動人心的 JSF 2 新特性,展示如何最佳地利用這些特性,這樣您就能夠利用 JSF 2 提供的功能。通過演示 JSF 2 的應用并伴隨一些最佳使用技巧,我將闡述前面兩個問題。下面是本文將要介紹的技巧:
但是,我將首先介紹貫穿整個系列文章的示例應用程序。本文的應用程序源代碼可以 下載 獲得。 圖 1 展示了一個 JSF mashup — 我將它稱為 places 應用程序 — 它使用 Yahoo! Web 服務將地址轉換為地圖,并顯示縮放級別和天氣預報: 圖 1. 從 Yahoo! Web Services 中查看地圖和天氣信息
要創建一個地點,需要填寫地址表單,激活 Go 按鈕,然后應用程序將把地址發送給兩個 Web 服務:Yahoo! Maps 和 Yahoo! Weather。
Map 服務在 Yahoo! 服務器上返回指向地址映射的 11 個地圖 URL,使用不同的縮放級別。Weather 服務返回一些預先組裝的 HTML。圖像 URL 和 HTML 內容都輕松地顯示在一個 JSF 視圖中,這要分別感謝
places 應用程序使您能夠輸入任意數量的地址。您甚至可以多次使用同一個地址 ,如圖 2 所示,它實際上演示了縮放級別: 圖 2. 縮放級別
places 應用程序有 4 個托管 bean(managed bean),如 表 1 所示: 表 1. places 應用程序中的托管 bean 托管 bean 名稱 類 范圍
應用程序在會話范圍內存儲了一組
創建地點非常簡單。清單 1 顯示了 圖 1 中的視圖所含的地址表單的代碼:
當用戶激活 Go 按鈕并提交表單后,JSF 將調用按鈕的操作方法:
清單 2 展示了
清單 2.
Place.fetch()
方法
注意
清單 3. 在視圖中顯示位置
清單 3
中的代碼使用 Facelets
圖 3. 視圖中顯示的位置
zoom 菜單(參見
圖 3
和
清單 3
)有一個
清單 4.
Place.zoomChanged()
清單 5.
Place.getMapUrl()
如 果曾經使用過 JSF 1,那么很可能會注意到本文的 JSF 2 代碼中存在一些細微的差別。首先,我使用了 JSF 2 的新的顯示技術 — Facelets — 而不是 JSP。您將從本系列后續文章中看到,Facelets 提供了許多強大的特性來幫助您實現健壯、靈活和可擴展的用戶界面。但是在前面的代碼清單中,我并沒有過多利用這種功能。然而,Facelets 為 JSF 帶來的眾多微小改進之一便是能夠將 JSF 值表達式直接放入到 XHTML 頁面;例如,在
清單 1
中,我將
從 Facelets 角度來講,還需要注意
清單 3
中的
目前為止,前面的代碼并沒有使用 Facelets,與 JSF 1 相比沒有出現顯著的變化。現在,我將展示更加大的差異。第一個比較大的差異體現在將要為 JSF 2 應用程序編寫的 XML 配置的數量方面。
Web 應用程序的 XML 配置始終是個麻煩問題 — 它非常冗長并且容易出現錯誤,因此最好將 XML 配置委托給一個框架,比如通過注釋、約定或特定于領域的語言。作為開發人員,我們應該能夠集中精力實現一些操作,而不是將浪費時間在冗長的 XML 方面。 作為一個典型的例子,清單 6 展示了在使用 JSF 1 的情況下,在 places 應用程序中聲明托管 bean 所需的 20 行 XML 代碼: 清單 6. JSF 1 的托管 bean 聲明
對于 JSF 2,XML 消失了,您將對類使用注釋,如清單 7 所示: 清單 7. JSF 2 的托管 bean 注釋
按照約定,托管 bean 的名稱與類名相同,類名的第一個字母被轉換為小寫。例如,
清單 7
中創建的托管,從上到小依次為:
在
清單 7
中,我對
也可以使用
表 2. JSF 2 托管 bean 注釋(
@...Scoped
注釋只對
@ManagedBean
有效)
托管 bean 注釋 描述 屬性
從 faces-config.xml 中移除托管 bean 聲明將極大地減少 XML,但是在 JSF 2 中,通過使用注釋(如我對托管 bean 所做的一樣)或是約定(比如 JSF 2 的簡化的導航處理),幾乎可以去掉所有的 XML 內容。
在 JSF 1 中,導航使用 XML 指定。比如,要從 login.xhtml 轉到 places.xhtml,可能使用清單 8 所示的導航規則: 清單 8. JSF 1 中的導航配置規則和用例
要去除
清單 8
中的 XML,可以利用 JSF 2 的導航約定:JSF 將 .xhtml 添加到按鈕操作的末尾并加載該文件。這意味著不需要使用注釋或其他內容,只需要使用約定就可以完整地避免編寫導航規則的需求。在清單 9 在,按鈕的操作是
清單 9. 通過約定進行導航
對于
清單 9
來說,不需要任何導航 XML。清單 9 中的按鈕加載 places.xhtml,但是前提是該文件和按鈕所在的文件處于同一個目錄中。如果操作并沒有以斜杠(
清單 10. 使用絕對路徑的導航
當用戶激活 清單 10 中的按鈕時,JSF 將加載 /pages/places.xhtml 文件。
默認情況下,JSF 將從一個 XHTML 頁面轉至另一個 XHTML 頁面,但是通過指定
清單 11. 通過重定向進行導航
Java 技術的最大優勢并不是 Java 語言,而是 Java 虛擬機(JVM)。在 JVM 上運行著強大、新穎和創新的語言,比如 Scala、JRuby 和 Groovy,這使您在編寫代碼時擁有了更多選擇。Groovy 這個名字有些奇怪,但是功能非常強大,融合了 Ruby、Smalltalk 和 Java 語言,它是這些語言中最為流行的一種語言(參見 參考資料 )。 使用 Groovy 的理由有很多。首先,它要比 Java 語言更加簡潔、功能更加強大。還有兩個原因:不使用分號,不需要強制轉換(casting)。
您可能還沒有注意到,在
清單 2
中,
可 以將 Groovy 用于任何使用 Java 代碼編寫的 JSF 工件 — 例如,組件、呈現器、驗證器和轉換器。事實上,這對于 JSF 2 來說并不新鮮 — 因為 Groovy 源文件編譯為 Java 字節碼,您只需使用 Groovy 生成的 .class 文件,就好象它們是由
JSF 2 提供了定義和訪問資源的標準機制。您將自己的資源放到名為 resources 的頂級目錄下,并使用一些 JSF 2 標記來在視圖中訪問這些資源。例如,圖 4 展示了 places 應用程序的資源: 圖 4. places 應用程序的資源
對資源的惟一需求是它必須位于 resources 目錄或 resources 目錄的子目錄中。可以隨意命名 resources 目錄的子目錄。
在您的視圖代碼中,可以使用兩個 JSF 2 標記訪問資源:
清單 12. 在 XHTML 中訪問資源
開 發人員需要能夠在頁面中指定想要呈現他們的資源的位置。例如,如果將 JavaScript 放在頁面體中,瀏覽器將在加載頁面時執行 JavaScript。另一方面,如果將 JavaScript 放到頁面的頭部,那么 JavaScript 只有在得到調用時才會被執行。由于資源的放置位置會影響它的使用方式,因此需要能夠指定希望在哪些位置顯示資源。
JSF 2 資源是
可重新定位的
,這意味著您可以在頁面中指定希望放置資源的位置。您將使用
有些情況下,需要使用 JSF 表達式語言(EL)訪問資源。比如,清單 13 展示了如何使用
清單 13. 使用 JSF 表達式語言訪問資源
在 EL 表達式內訪問資源的語法是
到目前為止,我僅僅觸及了 JSF 2 特性中最淺顯的內容,包括托管 bean、注釋、簡化導航和資源支持。在本系列隨后的兩篇文章中,我將探討 Facelets、JSF 2 的復合組件以及對 Ajax 的內置支持。
描述 名字 大小 下載方法 源代碼
學習
獲得產品和技術
討論
|
轉自:http://www.ibm.com/developerworks/cn/java/j-jsf2fu1/
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

