JSF的生命週期

2021-05-28 03:26:53 字數 2393 閱讀 7096

jsf 應用程式生命週期的六個階段是:

1、恢復檢視

2、應用請求值;處理事件

3、處理檢驗;處理事件

4、更新模型值;處理事件

5、呼叫應用程式;處理事件

6、顯示響應

下圖為jsf的生命週期圖,實線為正常流程,虛線表示可選。

一、恢復檢視

在 jsf 生命週期的第乙個階段 — 恢復檢視 中,通過facesservletservlet 發來乙個請求。這個 servlet 檢查這個請求並提取出檢視 id(檢視 id 由 jsp 頁面的名稱決定)。

jsf 框架控制器使用這個檢視 id 為當前檢視尋找元件。如果這個檢視還不存在,jsf 控制器就建立它。如果檢視已經存在,jsf 控制器就使用它。檢視包含所有 gui 元件。

生命週期的這個階段有三種檢視例項:新檢視、初始檢視和 postback,每種檢視的處理方法各不相同。對於新檢視,jsf 構建乙個 faces 頁面的檢視,並將事件處理函式和檢驗器連線到元件。檢視儲存在乙個facescontext物件中。

facescontext儲存狀態資訊,jsf 需要使用這些資訊為當前請求管理 gui 元件的狀態。facescontext將檢視儲存在它的viewroot屬性中;viewroot包含與當前檢視 id 對應的所有 jsf 元件。

對於初始檢視(第一次裝載頁面),jsf 建立乙個空檢視。在處理 jsp 頁面時,填充這個空檢視。填充初始檢視之後,jsf 直接進入顯示響應階段。

對於 postback(使用者返回到以前訪問過的乙個頁面),與頁面對應的檢視已經存在,所以只需恢復它。在這種情況下,jsf 使用現有檢視的狀態資訊重新構造它的狀態。

二、應用請求值

應用請求值 階段的目標是獲取每個元件的當前狀態。首先,必須從facescontext物件獲取或建立元件,然後獲取它們的值。元件值常常取自請求引數,但是也可以取自 cookie 或請求頭。對於許多元件,來自請求引數的值儲存在元件的submittedvalue中。

如果元件的直接事件處理屬性是 true,那麼值被轉換為正確的型別並被檢驗(在下一階段中進一步進行轉換)。然後,將轉換後的值儲存在元件中。如果值轉換或值檢驗失敗,那麼生成乙個錯誤訊息並放在facescontext中,在顯示響應階段,這個錯誤訊息與任何其他檢驗錯誤一起顯示。

三、處理驗證

轉換和檢驗一般發生在處理檢驗 階段。元件轉換並儲存它的submittedvalue。例如,如果字段繫結到乙個integer屬性,那麼值就轉換為乙個integer。如果值轉換失敗,那麼生成乙個錯誤訊息並放在facescontext中,在顯示響應階段,這個錯誤訊息與任何其他檢驗錯誤一起顯示。

在應用請求值階段之後,發生生命週期的第一次事件處理。在這個階段,根據應用程式的檢驗規則檢驗每個元件的值。檢驗規則可以是預定義的(jsf 附帶的),也可以由開發人員定義。將使用者輸入的值與檢驗規則進行對比。如果輸入的值是無效的,就將乙個錯誤訊息新增到facescontext中,並將元件標為無效。如果乙個元件被標為無效,jsf 就跳過其他階段,進入顯示響應階段,就會顯示當前的檢視和檢驗錯誤訊息。如果沒有發生檢驗錯誤,jsf 就進入更新模型值階段。

四、更新模型值

sf 應用程式生命週期的第四個階段 — 更新模型值 — 通過更新託管 bean 的屬性,更新伺服器端模型的實際值。只有繫結到乙個元件的值的 bean 屬性被更新。注意,這個階段在檢驗之後發生,所以可以確信複製到 bean 屬性的值是有效的(至少在表單字段級上有效;它們在業務規則級上仍然可能是無效的)。 

五、呼叫應用程式

在生命週期的第五個階段 — 呼叫應用程式 — jsf 控制器呼叫應用程式來處理表單提交。元件值已經經過轉換、檢驗並應用於模型物件,所以現在可以使用它們執行應用程式的業務邏輯。

在這個階段,呼叫您的動作處理方法,比如這個示例應用程式的contactcontroller中的persist()方法和read()方法。

在這個階段,還為乙個給定的序列或可能的多個序列指定下乙個邏輯檢視。對於成功的表單提交,可以定義特定的結果並返回這個結果。例如,

在得到成功的結果時,將使用者轉移到下乙個頁面。為了讓這個導航操作起作用,必須在 faces-config.xml 檔案中以導航規則的形式為成功的結果建立乙個對映。發生導航之後,就進入生命週期的最後乙個階段。jsf 獲得從動作方法返回的物件並呼叫它的tostring()方法。然後使用這個值作為導航規則的結果。

六、響應呈現

在生命週期的第六個階段 — 顯示響應,顯示檢視和它的所有元件,這些元件都處於當前狀態。

JSF生命週期

1 恢復檢視 restore view 根據請求訪問的檢視id 頁面位址 重建jsf 元件dom樹。如果jsf頁面是第一次訪問,也即是試圖id在記憶體中沒沒有存根,那麼jsf會在記憶體中構建jsf元件的dom樹。但是元件並沒有值,只是乙個模子。jsf元件獲取請求中的屬於自己的值,包括local值,和...

jsf生命週期

1,restoreviewphase 過載檢視階段 如名所述,這一階段過載畫面的檢視結構。首先試圖從session,或cookie裡還原jsf元件數,不能過載檢視的話,jsf則認為該頁面為當前使用者第一次請求,直接跳轉到renderview 畫面重畫階段 對畫面進行重畫。這一階段主要把從瀏覽器過來的...

jsf生命週期

jsf是基於事件驅動的,首先介紹jsf的事件偵聽。介紹中我僅僅給大家提供簡單的場景。不過我需要首先申明,思考這些事件的時候,你最好先用c s架構下的模式考慮她的運作模式,再用web下js排程動作的方式去認識執行過程。1 動作事件 action event 普通動作響應 actionevent是最普通...