Struts、Tapestry、JSF 是當前 J2EE 表現層新舊組合的框架技術。從誕生時間看,Struts 最早且應用最廣;Tapestry 3.0 漸受重視;Sun 推出 JSF 標準技術,雖初期不成熟留有空窗期,但隨 JSF 1.1 標準發布正式正面交鋒。
實際上 JSF 與 Tapestry 非直接競爭,各有側重,但細微差異在大型專案中可能帶來不同體驗。

基於 MVC 基準模式,表現層框架必須實現三大功能:
| 比較項目 | Struts | Tapestry 3.0 | JSF |
|---|---|---|---|
| View 顯示組件要求 | 組件必須繼承 ActionForm | 分顯式/隱式調用,組件繼承 BaseComponent | 普通 POJO,無需繼承(Managed Bean) |
| View 顯示粒度 | 頁面只能顯示對應表單的 ActionForm,配置中 Action:ActionForm 頁面通常 1:1:1 | 可將組件嵌入頁面任意行,組件數量無限制 | 同 Tapestry |
| 頁面分區 | Tiles 標籤庫實現,需額外 tiles-def.xml 配置 | 組件自有視圖頁面,調用即實現多頁面組合,強大自然 | 組件+標籤庫實現 Subview,重用 Layout 仍需結合 Tiles |
| 頁面跳轉 | html:link 寫死目標 URL,需對照配置 path 命名,與 Action 耦合 | URL 名稱即目標組件名稱,不涉及路徑操作,方便穩固 | 類似 Struts,需在配置檔查找,與組件分離 |
| 參數傳遞 | html:link 傳遞超過一個參數處理麻煩 | 直接調用組件賦予參數,無數量限制 | 參數分離傳遞給組件 |
| 事件觸發 | 表單 submit 激活,無法細化到表單欄位 | 可給每個欄位貼事件,事件組件實作 PageListener 介面 | 同 Tapestry,事件組件實作 ActionListener 介面 |
Struts 引入多個組件較複雜,無法直接引入,需繞彎: