JSF應用程式的生命周期由以下六個階段組成;
- Restore view phase
- Apply request values phase; process events
- Process validations phase; process events
- Update model values phase; process events
- Invoke application phase; process events
- Render response phase
這六個階段顯示了JSF處理表單的順序。該列表按可能的執行順序顯示各個階段,並在每個階段進行事件處理。
Phase 1: Restore view
只要單擊連結或按鈕並且JSF收到請求,JSF就開始恢復視圖階段。
在此階段,JSF構建視圖,將事件處理程序和驗證器連接到UI組件,並將視圖保存在FacesContext實例中。FacesContext實例現在將包含處理請求所需的所有信息。
Phase 2: Apply request values
創建/恢復組件樹後,組件樹中的每個組件都使用decode方法從請求參數中提取其新值。組件存儲此值。如果轉換失敗,將生成一條錯誤消息並在FacesContext上排隊。此消息將在呈現響應階段顯示,同時顯示所有驗證錯誤。
如果在當前FacesContext實例上有任何名爲render response的decode methods事件偵聽器,JSF將移動到render response階段。
Phase 3: Process validation
在此階段,JSF處理組件樹上註冊的所有驗證器。它檢查組件屬性規則以進行驗證,並將這些規則與爲組件存儲的本地值進行比較。
如果本地值無效,JSF將向FacesContext實例添加一條錯誤消息,生命周期將進入呈現響應階段,並再次顯示帶有錯誤消息的同一頁。
Phase 4: Update model values
在JSF檢查數據是否有效之後,它遍歷組件樹並將相應的伺服器端對象屬性設置爲組件的本地值。JSF將更新與輸入組件的value屬性對應的bean屬性。
如果在當前FacesContext實例上有任何名爲render response的updateModels方法,JSF將移動到render response階段。
Phase 5: Invoke application
在此階段,JSF處理任何應用程式級事件,例如提交表單/連結到另一個頁面。
Phase 6: Render response
在此階段,如果應用程式使用JSP頁面,JSF會要求容器/應用伺服器呈現頁面。對於初始請求,當JSP容器執行頁面時,頁面上表示的組件將被添加到組件樹中。如果這不是一個初始請求,則組件樹已經生成,因此不需要再次添加組件。在這兩種情況下,當JSP容器/應用伺服器遍歷頁面中的標記時,組件將呈現它們自己。
呈現視圖的內容後,將保存響應狀態,以便後續請求可以訪問它,並可用於還原視圖階段。