JSF 框架極度靈活,幾乎每個組成部分可替換,提供豐富切入點(可插入機制)控制生命週期各階段。JSF 生命週期六階段:Restore View → Apply Request Values → Process Validations → Update Model Values → Invoke Application → Render Response。本文介紹三種常見切入方式。
Lifecycle 是生命週期控制中心(如心臟),負責調度六階段。JSF 允許完全替換:
web.xml 定義 javax.faces.LIFECYCLE_ID 指向自定義實現。javax.faces.lifecycle.Lifecycle 抽象類並實現抽象方法。除非極特殊需求,不建議直接替換 Lifecycle,因 JSF 提供更細粒度切入點。
faces-config.xml 配置 `javax.faces.event.PhaseListener 介面三方法:
beforePhase(PhaseEvent):各階段處理前調用。afterPhase(PhaseEvent):各階段處理後調用。getPhaseId():指定監聽特定階段或全部。此方式最靈活,可在任意階段前後插入邏輯(如安全檢查、效能監控、日誌記錄)。
按鈕點擊/命令連結點擊觸發 Invoke Application 階段的事件廣播。自定義 ActionListener 可替換預設行為:
javax.faces.event.ActionListener,實現 processAction(ActionEvent)。文中提供完整代碼範例:獲取 FacesContext、Application、ELContext、ExpressionFactory、動態構建 MethodExpression 調用 Bean 方法、導航處理、條件性 renderResponse()。