在后面的時間里,我會陸續的把我在 JSF 學習過程中的一些心得體會以及一些值得參考的代碼拿出來,整理成 JSF Cookbook 系列,并逐步發布出來。當然在整理的過程中因為個人能力有限,難免會出現錯誤和遺漏,請高手多多指點,謝謝。只希望這些資料對大家學習JSF帶來一些便利。因為個人時間有限,速度可能會有些慢,請大家原諒,也希望有興趣的朋友也能投入到資料的編寫過程中來。
該資料編寫工作在我的論壇 http://www.js66.com/java 中進行,通常情況下我會在論壇中編寫一定的數量的資料后,集中在這里發布,可能會有些延期,所以如果大家希望看最新版的資料,請到我的論壇來,如果你有這方面的疑問也可以到這里來尋求解答。
1.什么是 JavaServer Faces
問題:
你對JSF不了解,希望了解更多關于JSF的資料。
解決:
JavaServer Faces(JSF) 是一種標準的 J2EE 表示層的技術,其主旨是為了使 Java 開發人員能夠快速的開發基于 Java 的 Web 應用程序。它不同于其它 Java 表示層技術的最大優勢是其采用的組件模型,事件驅動,并且和其它的 MVC 框架相比,它是一種 Java 標準,在Java EE 5 中,JavaServer Faces 1.2 正式作為一個標準,加入 Java Enterprise 的世界。
作為一種高度組件化的技術,開發人員可以在一些開發工具的支持下,實現拖拉式編輯操作,用戶只需要簡單的將 JSF 組件拖到頁面上,就可以很容易的進行 Web 開發了。這是其作為一種組件化的技術所具有的最大好處,我們能用的組件不光是一些比較簡單的輸入框之類,還有更多復雜的組件可以使用的,比如 DataTable 這樣的表格組件, Tree 這樣的樹形組件等等。在 Ajax 盛行的今天,我們也可以通過 JSF 組件來簡化開發人員的開發難度,使得 Ajax 能通過拖拖拉拉的操作方便的進入到我們的應用中去。作為一種標準的技術,JavaServer Faces 得到了相當多工具提供商的支持。同時我們也會有很多很好的免費開發工具可以使用,前不久 Sun Java Studio Creator 2 和 Oracle JDeveloper 10g 作為免費的支持 JSF 的開發工具發布,給 JSF 帶來了不小的生氣。另外我們也有一些很優秀的商業開發工具可共選擇,BEA Workshop (原 M7 NitroX),Exadel,MyEclipse 這樣的基于 Eclipse 的插件開發工具,為現在廣大的 Eclipse 用戶帶來了不小的便利,IBM 的 Rational Application Developer 和 Borland 的 JBuilder 也是很不錯的支持 JSF 可視化開發的商業開發工具,在后面我會用一節的篇幅簡單的介紹一下這些工具。
傳統的 Web 應用程序與桌面應用程序存在著許多本質上的差別,使得用戶要手工的去捕獲各種瀏覽器請求,保存客戶端狀態,并且手工控制著頁面的轉向,等等。JSF 的出現,無疑給我們帶來了巨大的便利,JSF 提供了事件驅動的頁面導航模型,該模型使應用程序開發人員能夠設計應用程序的頁面流。與 Struts 的方式向類似的是,所有的頁面流信息都定義在 JSF 配置 XML 文件 (faces-config.xml) 中,而非硬編碼在應用程序中。這很大程度簡化了開發人員開發難度,簡化了應用程序的開發。
同時JavaServer Faces 也是一種遵循遵循模型-視圖-控制器 (MVC) 模式的框架。實現了視圖代碼(View)與應用邏輯(Model)的完全分離,使得使用 JSF 技術的應用程序能夠很好的實現頁面與代碼的分離。所有對 JSF 頁面的請求都會通過一個前端控制器 (FacesServlet) 處理,系統自動處理用戶的請求,并將結果返回給用戶。這和傳統的 MVC 框架并沒有太大的區別。
JavaServer Faces 是一種使用了 POJO 的技術同時在使用了類似 Spring 的控制反轉(IoC) (或稱為依賴注入-DI) 技術,在 JSF 的 Backing Bean 中,我們可以把視圖所需要的數據和操作放進一個 Backing Bean 中。同時得益于 JSF 使用的 DI 技術,我們可以在配置文件中初始化 Managed Bean,同時我們也可以通過這樣的技術很方便的和使用類似技術的 Spring 進行整合。
2.下載 JSF 的實現版本
問題:
你需要使用 JSF 來開發應用程序。
解決:
因為 JSF 1.1 是一個標準(JSR-127),所以會有一些不同的廠商和組織提供了自己的實現,目前比較流行的實現包括 Sun 的 Reference Implementation (參考實現,簡稱為 RI) ,Apache 軟件基金會的 Myfaces, Oracle 的 ADF Faces (目前 Oracle 已經將其捐贈給 Apache 軟件基金會下的 Myfaces 項目,成為它的一個子項目)。
分別提供了以上這些實現的下載地址,大家可以去下載 JSF 的實現版本,我們會在后面的介紹中用到這些包。
Sun RI : http://java.sun.com/j2ee/javaserverfaces/
Myfaces : http://myfaces.apache.org/
ADF Faces : http://www.oracle.com/technology/products/jdev/htdocs/partners/addins/exchange/jsf/index.html
討論:
因為 JSF 有了這么多種類的實現版本,大家或許會覺得有些疑惑,我該到底用哪個版本去開發呢?在我現在和以后的文章系列里面,我將會以 Apache Myfaces 1.1.1 的實現版本為例,來介紹 JSF 技術。
Struts 社區為了擴展 JSF,推出了 Shale 子項目,目的是為 JSF 提供大量的應用支持,它以 JSF 的實現為基礎,提供了一系列方便易用的特性,包括有:Web Flow,Ajax,Tiles 的集成,客戶端驗證,并且提供了類似于 Tapestry 的視圖和參數化的 SubTree 模型。雖然 Shale 到目前為之還沒有一個正式發布的版本,但它在 2005 年 JavaOne 的 Web 框架評比中,在技術特性的評比中獲得了 4.95 的高分,超越 JSF, Tapestry, Webwork, Struts 而獨占鰲頭。但是相信我們除了 JSF 標準外,很快會有這樣一個更好的選擇了。
記住,Shale 不是 JSF,而是對 JSF 的擴展,也正如 Struts 的創始人 Craig McClanahan 所說的“Shale 與 JSF 的關系,就像 Struts 與 JSP 的關系一樣”。
[Last Update 2006-01-17]
posted on 2006-02-17 15:41
steady 閱讀(2941)
評論(8) 編輯 收藏