JSF 處理請求經歷 6 個階段(扣除事件處理),理解這些階段是自訂組件開發的前提:
| 階段 | 名稱 | 核心任務 | 異常跳轉 |
|---|---|---|---|
| 1 | Restore View | 建立/恢復組件樹 (UIViewRoot),首次訪問建新樹,Postback 從狀態恢復 | 無請求參數直接跳至 Render Response |
| 2 | Apply Request Values | 各組件從請求取值更新本地值,觸發 ActionEvent 入隊列 | immediate=true 的 Command 直接跳至 Render Response;Input 即時轉換驗證後跳至 Render Response |
| 3 | Process Validations | 執行轉換器與驗證器 | 驗證失敗跳至 Render Response(重繪同頁顯示錯誤) |
| 4 | Update Model Values | 將通過驗證的本地值推送至 Backing Bean / 模型物件 | - |
| 5 | Invoke Application | 處理動作事件,執行業務邏輯,決定導航結果 | - |
| 6 | Render Response | Renderer 輸出頁面,狀態儲存 | - |
immediate="true" 改變處理時機,Command 跳過驗證/模型更新,Input 提前驗證。ActionEvent、ValueChangeEvent 在 Apply Request Values 入隊,Invoke Application 統一處理。FacesContext.renderResponse() 直接跳至渲染;responseComplete() 終止生命週期。自訂組件前,先搜尋 Apache MyFaces、PrimeFaces 等成熟組件庫,避免重複造輪子。