所有框架必須實現三大功能:
| 維度 | Struts | Tapestry 3.0 | JSF |
|---|---|---|---|
| 組件要求 | 繼承 ActionForm | 繼承 BaseComponent 或隱式調用 | 普通 POJO,@ManagedBean,無繼承限制 |
| 視圖組件粒度 | 1:1:1 (Action:Form:Page),難引入多組件 | 任意位置嵌入,數量無限制 | 同 Tapestry,彈性高 |
| 頁面分區 | Tiles 標籤庫 + tiles-def.xml | 組件自帶視圖,自然組合 | Subview + 標籤庫,複用 Layout 需配合 Tiles |
| 頁面跳轉 | html:link 寫死 path,耦合配置 | 目標為組件名,無 path 概念 | 導航規則 + from-outcome,標籤庫實現 |
| 參數傳遞 | 多參數麻煩 | 直接調用組件賦值,無限制 | 參數分離傳遞 |
| 事件粒度 | Form 級單一事件 | 欄位級事件,實作 PageListener | 欄位級事件,實作 ActionListener |
ActionForm(大雜燴)或手工放入 Request/Session(退化為 JSP 編程)| 場景 | 推薦 | 理由 |
|---|---|---|
| 高靈活度頁面、複雜組件組合 | Tapestry | 純組件架構,組合最自然 |
| 一般資料錄入、表單密集系統 | Struts / JSF | 成熟穩定,生態豐富 |
| 新專案 | JSF | 標準規範,組件生態最豐富 |
| 既有 Struts 專案 | 維持 Struts | 遷移成本高,收益有限 |
| 需遷移 | JSF + Tapestry 並評 | 視專案屬性決定 |