JavaServer Faces (JSF) 是 Sun 主導的 JCP 標準 (JSR 127/252),提供元件化、事件驅動、工具友好的伺服器端 UI 框架,解決 JSP 混雜 HTML/Java、難以重用、調試困難等痛點。
| 特性 | 說明 |
| 元件化 | UI 封裝為可重用元件 (按鈕、表格、樹),擁有狀態、事件、驗證、轉換器 |
| 事件驅動 | 客戶端動作 (點擊、輸入) 自動映射至伺服器端 Listener,無需手寫請求參數解析 |
| 標準化 | JCP 規範,多廠商實現 (Sun RI、MyFaces、ADF Faces、IceFaces),避免廠商鎖定 |
| 工具支援 | RAD (WebSphere Studio、JDeveloper、Java Studio Creator) 拖拉生成頁面、綁定 Bean、配置導航 |
| MVC 徹底分離 | View (JSP/Facelets) ↔ Controller (FacesServlet) ↔ Model (POJO/Backing Bean) |
| 渲染器分離 | 元件邏輯與輸出編碼 (HTML/WML/VoiceXML) 分離,支援多裝置 |
三、架構組成
- API:
javax.faces.* — 元件樹、生命週期、事件、驗證、轉換、國際化、無障礙。
- 標籤庫:
h: (HTML)、f: (核心)、facelets: (View 技術) 在頁面聲明元件樹。
四、生命週期六階段
- Restore View — 建立/恢復元件樹
- Apply Request Values — 解碼請求參數賦值元件
- Process Validations — 執行驗證器
- Update Model Values — 通過 ValueExpression 更新 Backing Bean
- Invoke Application — 執行 Action Listener / Action 方法
- Render Response — 編碼元件輸出響應
五、開發三步驟
- 視圖設計:RAD 拖拉元件、綁定 Bean 屬性、設定驗證/轉換、指定 Action。
- 模型設計:編寫 Backing Bean (Managed Bean),含屬性、Action 方法、業務邏輯委派。
- 控制器配置:
faces-config.xml 定義導航規則、Managed Bean 範圍、轉換器/驗證器註冊;web.xml 配置 FacesServlet。
六、角色分工
- 頁面設計師:專注 JSF 頁面佈局、元件屬性。
- 應用開發者:專注 Backing Bean、業務邏輯。
- 架構師:配置導航流程、安全、國際化。
七、生態與版本
- JSF 1.1 (當前) → 1.2 (隨 Java EE 5 發布) → 2.0 (Facelets 標準化、AJAX、注解配置)。
- 主流實現:Sun RI、Apache MyFaces、Oracle ADF Faces、ICEfaces、RichFaces、PrimeFaces。
八、總結
JSF 以元件化、標準化、工具化重新定義 Java Web 開發體驗,雖早期版本有效能與複雜度爭議,但隨生態成熟 (特別是 JSF 2.x + Facelets + PrimeFaces),已成企業級 Web 開發主流選擇之一。
- 上一篇文章: Acegi 學習啟程:醞釀近一年的突破與系列規劃
- 下一篇文章: Java 實現域名與 IP 地址互轉:InetAddress 完整指南
Copyright ©
程式碼之家 All Rights Reserved