JSF生命週期


JSF(JavaServer Faces)應用程式框架的簡單程式是自動管理生命週期階段,並允許您手動管理。JSF(JavaServer Faces)應用程式的生命週期從用戶端對頁面發出HTTP請求時開始,並在伺服器響應頁面時結束。

JSF生命週期分為兩個主要階段:

  • 執行階段
  • 渲染階段

1. 執行階段

在執行階段,當第一次請求時,構建或恢復應用程式檢視。 對於其他後續請求,執行其他操作,如應用請求引數值,對元件值執行轉換和驗證,受託管的bean將使用元件值進行更新,並呼叫應用程式邏輯。
執行階段被進一步分成以下子階段。

  • 恢復檢視階段
  • 應用請求值階段
  • 流程驗證階段
  • 更新模型值階段
  • 呼叫應用階段
  • 渲染響應階段

恢復檢視階段

當用戶端請求一個JavaServer Faces頁面時,JavaServer Faces實現開始恢復檢視階段。 在此階段,JSF將檢視中的元件構建為請求頁面,線性事件處理程式和驗證器的檢視,並將檢視儲存在FacesContext範例中。

如果對該頁面的請求是回發,那麼與該頁面相對應的檢視已經存在於FacesContext範例中。 在此階段,JavaServer Faces實現通過使用儲存在用戶端或伺服器上的狀態資訊來還原檢視。

應用請求值階段

在此階段,在回發請求期間恢復元件樹。 元件樹是表單元素的集合。樹中的每個元件通過使用其decode(processDecodes())方法從請求引數中提取其新值。 之後,該值將本地儲存在每個元件上。

  • 如果任何解碼方法或事件偵聽器在當前FacesContext範例上呼叫了renderResponse方法,則JavaServer Faces實現將跳過「渲染響應」階段。
  • 如果任何事件在此階段已排隊,則JavaServer Faces實現將事件廣播到有興趣的監聽器。
  • 如果應用程式需要重定向到其他Web應用程式資源或生成不包含任何JavaServer Faces元件的響應,則可以呼叫FacesContext.responseComplete()方法。
  • 如果當前請求被識別為部分請求,則從FacesContext檢索部分上下文,並應用部分處理方法。

流程驗證階段

在此階段,JavaServer Faces通過使用其validate()方法來處理在元件上註冊的所有驗證器。 它檢查指定驗證規則的元件屬性,並將這些規則與為元件儲存的本地值進行比較。 JavaServer Faces還完成了沒有將immediate屬性設定為true的輸入元件的轉換。

  • 如果任何驗證方法或事件偵聽器在當前FacesContext上呼叫了renderResponse方法,則JavaServer Faces實現將跳過「渲染響應」階段。
  • 如果應用程式需要重定向到不同的Web應用程式資源或生成不包含任何JavaServer Faces元件的響應,則可以呼叫FacesContext.responseComplete方法。
  • 如果事件在此階段已排隊,則JavaServer Faces實現將它們廣播給有興趣的監聽器。
  • 如果當前請求被識別為部分請求,則從FacesContext檢索部分上下文,並應用部分處理方法。

更新模型值階段

確保資料有效後,它遍歷元件樹,並將相應的伺服器端物件屬性設定為元件的本地值。 JavaServer Faces實現只更新輸入元件的value屬性指向bean屬性。 如果本地資料無法轉換為bean屬性指定的型別,生命週期將直接前進到「渲染響應」階段,以便重新呈現頁面並顯示錯誤。

  • 如果任何updateModels方法或任何監聽器在當前FacesContext範例上呼叫了renderResponse()方法,則JavaServer Faces實現將跳過「渲染響應」階段。
  • 如果應用程式需要重定向到其他Web應用程式資源或生成不包含任何JavaServer Faces元件的響應,則可以呼叫FacesContext.responseComplete()方法。
  • 如果任何事件在此階段已排隊,JavaServer Faces實現將它們廣播到有興趣的監聽器。
  • 如果當前請求被識別為部分請求,則從FacesContext檢索部分上下文,並應用部分處理方法。

呼叫應用階段

在此階段,JSF處理應用程式級事件,例如提交表單或連結到另一個頁面。
現在,如果應用程式需要重定向到其他Web應用程式資源或生成不包含任何JSF元件的響應,則可以呼叫FacesContext.responseComplete()方法。

之後,JavaServer Faces實現將控制轉移到「渲染響應」階段。

渲染響應階段

這是JSF生命週期的最後階段。 在此階段,JSF將構建檢視並將許可權委託給相應的資源來呈現頁面。

  • 如果這是初始請求,則頁面上表示的元件將被新增到元件樹中。
  • 如果這不是初始請求,元件已經新增到樹中,不需要再新增。
  • 如果請求是回應,並且在應用請求值階段,過程驗證階段或更新模型值階段期間遇到錯誤,則在此階段將再次呈現原始頁面。

如果頁面包含h:messageh:messages標籤,頁面上會顯示任何排隊的錯誤訊息。
在渲染檢視的內容之後,儲存響應的狀態,以便後續請求可以存取它。 恢復檢視階段可以使用儲存的狀態。

2. 渲染階段

在此階段,請求的檢視作為對用戶端瀏覽器的響應。 檢視渲染是以HTML或XHTML生成輸出的過程。 所以,使用者可以在瀏覽器看到它。

在渲染過程中採取以下步驟。

  • 當用戶端對index.xhtml網頁進行初始請求時,編譯應用程式。
  • 應用程式在編譯後執行,並為應用程式構建一個新的元件樹,並放置在FacesContext中。
  • 使用由EL表示式表示的元件和與其關聯受託管bean屬性填充元件樹。
  • 基於元件樹。 建立了新的檢視。
  • 該檢視作為響應呈現給請求用戶端。
  • 元件樹被自動銷毀。
  • 在後續請求中,重新構建元件樹,並應用已儲存的狀態。