經歷 JSF 專案實戰與 Seam 深度學習後,結合 Struts2 對比評估,最終決定團隊放棄 JSF/Seam 技術棧。本文詳細分析 JSF 核心痛點、Seam 整合複雜度與團隊技術決策考量。
JSF 將一切組件化、模型化,類似 Swing 架構。但 HTTP 無狀態本質導致組件樹必須存放伺服器端,開發者無法像 CS 程式便利檢視組件狀態。封裝過深時,遇到問題極難追蹤,除錯成本極高。
JSF 自訂組件複雜度遠超 JSP Tag Library,修改既有組件行為需深度理解組件生命週期、渲染器、事件處理等核心機制,非資深開發者難以駕馭。
專案中千行表格頁面搭配 rich:dropdownMenu 導致回應極慢。Root Cause:RichFaces 大量使用 div 產生巢狀 DOM 結構,瀏覽器渲染效能急劇下降。改用原生 html:table 即解決,揭示組件庫效能風險。
| 維度 | JSF/Seam | Struts2 |
|---|---|---|
| 架構清晰度 | 複雜、隱含魔法 | 清晰、易理解 |
| 學習曲線 | 陡峭 | 平緩 |
| 除錯容易度 | 困難 | 容易 |
| 團隊適用性 | 需資深架構師 | 普遍開發者即可 |
| 專案結構 | EAR 多模組複雜 | 單一 WAR 簡潔 |
「JSF 看起來很美,用起來不爽。」—— 技術選型應以團隊實力、專案規模、維護成本為核心考量,而非追求技術先進性。對中小團隊,Struts2 (或現代 Spring MVC) 仍是務實之選。