jsf 應用程式生命週期的六個階段是:
1、恢復檢視
2、應用請求值;處理事件
3、處理檢驗;處理事件
4、更新模型值;處理事件
5、呼叫應用程式;處理事件
6、顯示響應
下圖為jsf的生命週期圖,實線為正常流程,虛線表示可選。
一、恢復檢視
在 jsf 生命週期的第乙個階段 — 恢復檢視 中,通過facesservlet
servlet 發來乙個請求。這個 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是最普通...