先轉一篇介紹JSF的文章: Javaserver Faces 簡介 — 什麼是 JSF? 作者:Chris Schalk,Oracle Corporation2005 年 4 月 什麼是 JSF? JavaServer Faces (JSF) 是一種用於構建 Web 應用程式的新標準 Java 框架 ...
先轉一篇介紹JSF的文章:
Javaserver Faces 簡介 — 什麼是 JSF?
作者:Chris Schalk,Oracle Corporation
2005 年 4 月
什麼是 JSF?
JavaServer Faces (JSF) 是一種用於構建 Web 應用程式的新標準 Java 框架。它提供了一種以組件為中心來開發 Java Web 用戶界面的方法,從而簡化了開發。JavaServer Faces 還引起了廣大 Java/Web 開發人員的興趣。“企業開發人員”和 Web 設計人員將發現 JSF 開發可以簡單到只需將用戶界面 (UI) 組件拖放到頁面上,而“系統開發人員”將發現豐富而強健的 JSF API 為他們提供了無與倫比的功能和編程靈活性。JSF 還通過將良好構建的模型-視圖-控制器 (MVC) 設計模式集成到它的體繫結構中,確保了應用程式具有更高的可維護性。最後,由於 JSF 是通過 Java Community Process (JCP) 開發的一種 Java 標準,因此開發工具供應商完全能夠為 JavaServer Faces 提供易於使用的、高效的可視化開發環境。
JSF 體繫結構
JavaServer Faces 的 MVC 實現
JSF 的主要優勢之一就是它既是 Java Web 用戶界面標準又是嚴格遵循模型-視圖-控制器 (MVC) 設計模式的框架。用戶界面代碼(視圖)與應用程式數據和邏輯(模型)的清晰分離使 JSF 應用程式更易於管理。為了準備提供頁面對應用程式數據訪問的 JSF 上下文和防止對頁面未授權或不正確的訪問,所有與應用程式的用戶交互均由一個前端“Faces”servlet(控制器)來處理。
圖 1:JavaServer Faces 的 MVC 實現
JSF 生命周期
Faces Controller servlet 充當用戶和 JSF 應用程式之間的紐帶。它在明確限定的 JSF 生命周期(規 定了用戶請求之間的整個事件流)的範圍內工作。例如,一收到訪問 JSF 應用程式的初始 Web 請求,Faces Controller servlet 便通過首先準備 JSF 上下文(存放所有應用程式數據的一個 Java 對象)來處理請求。然後控制器把用戶指引到所請求的頁面。該頁面通常使用簡單的表達式語言來處理來自 JSF 上下文的應用程式數據。一收到後續請求,控制器就更新所有模型數據(假設輸入了新數據)。JSF 開發人員可以通過編程的方式在應用程式運行期間隨時訪問整個 JSF 生命周期,從而可以隨時對應用程式的行為進行高度控制。
JavaServer Faces 的用戶界面組件
JavaServer Faces 的真正威力在於它的用戶界面組件模型。在該模型中,應用程式完全用組件集合構建,這些組件可以針對多種客戶端類型用不同的方式來進行顯示。與其他專有技術 (如 ASP.Net)有點類似,JSF 的 UI 組件模型技術使開發人員能夠使用預先構建的用戶界面 (UI) 組件來構建 Web 用戶界面(而非完全從頭構建用戶界面),從而提供了前所未有的開發效率。JSF UI 組件有多種形式,可以簡單到只是顯示文本的 outputLabel,或者複雜到可以表示來自數據集合(如資料庫表)的表格化數據的 dataTable。
JavaServer Faces 規範在其參考實施中提供了一組基本 UI 組件,這些組件本身是非常有用的。它們包括兩個組件庫,即“HTML”組件庫 — 它大部分映射了標準的 HTML 輸入元素;以及“核心”庫 — 它輔助常見的應用程式開發任務(如,國際化和驗證/轉換輸入數據)。除了提供一個基本 UI 組件庫之外,JSF API 還提供了擴展和創建定製 JSF UI 組件的功能,從而在基本組件之上提供更多功能。
其他用戶界面組件庫
由於 JSF API 的豐富性和靈活性,許多 Java 開發人員開始創建新的 JSF 組件庫和實現。Oracle 的 ADF Faces 是一個完全符合 JSF 規範的組件庫,它為 JSF 應用程式開發提供了一組廣泛的增強 UI 組件。這些組件包括針對每種客戶端類型的多種呈現器、高級表格、顏色和日期選擇器以及大量通用組件(如菜單、命令按鈕、轉移選擇器和進度指示計)。
圖 2:Oracle 的 ADF Faces JSF UI 組件
除了 Oracle 的 ADF Faces 之外,還有其他新的 JSF 組件庫開始從開放源代碼社區和軟體供應商社區中出現。MyFaces 就是一個新 JSF UI 組件庫的例子,它通過 Apache 作為一個開放源代碼項目提供的。Myfaces 還是對 JSF 基本 UI 組件的增強,它擁有更廣泛的 UI 功能,如集成的 Tiles 支持、支持 Javascript 的菜單和樹控制項。
圖 3:開放源代碼的 MyFaces 實現和 UI 組件庫
JSF UI 組件的可插入呈現技術
JSF UI 組件技術最引人註目一個方面就是它的可插入呈現功能。JSF UI 組件能夠根據查看組件的客戶端的類型來以不同方式呈現自身。例如,HTML 瀏覽器將看到特定 UI 組件的“HTML 瀏覽器友好”版本,而支持無線或 WAP 的微型設備將看到同一UI 組件的“WML 友好”版本!JSF 通過解除 UI 組件與其呈現邏輯之間的耦合從而能夠為同一 UI 組件創建多個呈現器實現了這一功能。不同的呈現器可以與 UI 組件相關聯,在運行時 UI 組件可以根據請求的客戶端類型決定使用哪個呈現器。
圖 5:一個 ADF Faces 表格組件針對無線客戶端和 HTML 客戶端進行了不同的呈現
還應當指出的是,由於 JSF 的可插入呈現功能,使得 JSF UI 組件能夠顯示任何類型的數據,無論它是標記數據(如 HTML、XML、WML 等)還是二進位數據。例如,UI 組件還可以顯示二進位數據,如圖像流或不同的文檔類型,如 SVG、PDF 和 Word。
一個新的 JSF 組件開發人員社區
隨著 JSF 開發人員和擁護者社區的不斷壯大,現在有幾個網站致力於進一步推動獨立的 JSF 開發。JSFCentral 就是一個完全為 JSF 開發社區服務的新網站。它包含 JSF 技術信息、產品/組件信息以及大量與 JSF 相關的文章。
圖 4:JSFCentral — 一個免費的 Javaserver Faces 社區
(JSFCentral 的地址是:http://jsfcentral.com)
JSF 開發工具
因為 JavaServer Faces 是一種標準的 Java 技術,因此軟體開發工具完全能夠為 JavaServer Faces 提供高級的集成開發工具支持。多個供應商現在不同程度地支持 JSF 開發,這大大提高了 JSF 的易用性和功能。Oracle、Sun、Borland 和 IBM 都為 JavaServer Faces 提供了開發環境。由於開發工具供應商在競相提供更好、更簡單和更多的開發環境,因此基於 IDE 的 JSF 開發擁有美好的前景!
圖 6:Oracle 的 JDeveloper 提供高效、可視化的 JSF 開發體驗
總結
JavaServer Faces 通過提供模型-視圖-控制器設計模式的一個簡潔實現,同時在不犧牲開發能力和靈活性的前提下提供高效的以組件為中心的開發,解決了 Java Web 開發的許多歷史問題。此外,因為 JSF 是一種 Java 標準,因此多個軟體供應商將繼續提供始終高效的開發環境,這些開發環境毫無疑問將達到或很可能超過專有的可視化開發環境。請繼續關註!