jsf是基於事件驅動的,首先介紹jsf的事件偵聽。介紹中我僅僅給大家提供簡單的場景。不過我需要首先申明,思考這些事件的時候,你最好先用c/s架構下的模式考慮她的運作模式,再用web下js排程動作的方式去認識執行過程。
1)動作事件:action event:普通動作響應
actionevent是最普通的事件,任何command元件(button,link等,請參見uicommand)通過註冊actionlistener均可出發此事件偵聽響應,簡單說,使用者有意義的操作,即可觸發。
2)即時事件:immediate event:立即處理,不驗證/轉換/更新模型值(即bean不會儲存屬性)
3)值改變事件:value change event:選擇ui值改變後,級聯排程.如果國際化中選擇語言.
值改變事件,如果乙個輸入(uiinput)、選擇(uiselects)元件的值發生改變,將會執行的偵聽。所謂的值改變,就是表單中local值和submit值發生偏移,local值就是頁面渲染時上乙個生命週期中傳遞的值,簡單說就是表單中原來展示的值(server端生成的元件值,在週期中編碼進去)。。submit值,就是面向使用者或者操作者主動輸入的客戶端值。
比如:表單展示時,server端為乙個下拉列表賦值為1(local值),如果使用者選擇了2(submit值).請你用相同的思維去考慮輸入框。
如果值改變,那麼就會被執行,最好的場景就是:國際化中選擇語言,然後把最新的語言元素,廣播到整個站點。
4)階段事件:phase event:監聽響應的jsf生命週期
jsf的執行大致分為6個階段,具體如下(jsf生命週期)。當然這類事件,可以註冊到元件,但是更多的時候,用來監控站點中特殊元件的資料操作。
2.jsf生命週期
1)恢復檢視(restore view)
檢視表示組成特定頁面的所有元件。它被儲存在客戶端(通常儲存在隱藏欄位中)或伺服器中(通常在會話中)。根據請求訪問的檢視id(頁面位址),重建jsf 元件dom樹。如果jsf頁面是第一次訪問,也即是試圖id在記憶體中沒沒有存根,那麼jsf會在記憶體中構建jsf元件的dom樹。恢復檢視也確保了元件的值,與樹中的元件相關聯的事件***、驗證器或者轉換器,都被恢復。
jsf元件獲取請求中的屬於自己的值,包括local值,和submit值.同時處理轉換,轉換成功,更新local值(submit轉換結果),當然過程沒有那麼簡單,jsf處理器有自己的一套解碼過程。
3) 執行驗證
在處理驗證階段,jsf遍歷元件樹並檢查每個元件,看是否每個元件的被提交值都可以接受。驗證發生前,被提交值將首先由註冊到該元件的轉換器或者預設轉換器進行轉換。然後驗證直接由元件進行或者委託給乙個或者多個其他驗證器來進行。如果使用者的輸入無效就會想facescontext中增加乙個錯誤訊息,並且該元件會被表示為無效,然後轉到響應階段,顯示當前檢視,表示錯誤資訊。
4)更新模型值:如果所有的元件本地值轉換驗證等均成功,此時jsf就會根據el處理關聯的bean,並更新bean繫結值.在此處jsf會根據el繫結載入配置的後台bean。
5)呼叫應用:呼叫註冊的偵聽器,然後執行事件驅動,獲取下乙個檢視。偵聽器此時可以有效的偵聽到ui元件的各項資料,事件驅動部分即action可以有效的獲取被更新的後台bean資料。執行自己的業務邏輯。
6)渲染響應(render response)
到此請求處理結束,根據導航規則,渲染響應的頁面.依次執行…
JSF生命週期
1 恢復檢視 restore view 根據請求訪問的檢視id 頁面位址 重建jsf 元件dom樹。如果jsf頁面是第一次訪問,也即是試圖id在記憶體中沒沒有存根,那麼jsf會在記憶體中構建jsf元件的dom樹。但是元件並沒有值,只是乙個模子。jsf元件獲取請求中的屬於自己的值,包括local值,和...
jsf生命週期
1,restoreviewphase 過載檢視階段 如名所述,這一階段過載畫面的檢視結構。首先試圖從session,或cookie裡還原jsf元件數,不能過載檢視的話,jsf則認為該頁面為當前使用者第一次請求,直接跳轉到renderview 畫面重畫階段 對畫面進行重畫。這一階段主要把從瀏覽器過來的...
JSF的生命週期
jsf 應用程式生命週期的六個階段是 1 恢復檢視 2 應用請求值 處理事件 3 處理檢驗 處理事件 4 更新模型值 處理事件 5 呼叫應用程式 處理事件 6 顯示響應 下圖為jsf的生命週期圖,實線為正常流程,虛線表示可選。一 恢復檢視 在 jsf 生命週期的第乙個階段 恢復檢視 中,通過face...