JSF生命週期簡介

2021-06-08 07:08:35 字數 2002 閱讀 5432

前沿:對於很多jsf初學者,甚至是有開發經驗的開發者,都沒有清晰的認識jsf的生命週期已經如何恰當使用jsf構架合適的專案。

在此我需要首先說一下,jsf是乙個優秀的框架,並且它相當的成熟,但是請你不要用斧子去切菜,很多時候你會罵「斧子」不鋒利。。使用jsf要知道它適合的開發場景

1)jsf不適合以頁面展現為目的的web站點:如果你的專案,是乙個資訊系統,或者是乙個合併了強大靜態資料的應用系統,那麼用jsf稍微有些不妥,因為jsf不能再展現上為你節約更多的人力,反而它會綁架你的思考或者設計方式。

2)jsf雖然提供了強大元件,以及「承諾」的自定義元件開發,但是很多時候元件約束了你的手腳,你會逼著自己用元件去做文章,再者「自定義」元件並沒有你想象的那麼「溫柔」反而很坎坷。。有時候你會懷念html的放蕩,js的「忠誠」。。

3)jsf的元件,已經動態訊息機制,頁面流程統一管理,等等特性,其實時時在想你發出乙個訊號,「我適合做互動**,操作繁多的面向使用者的應用系統」。

在你使用jsf之前,你需要了解下面的兩種事情,它會讓你在「清醒」中開發「清醒」的程式,閉著眼開發jsf,其實你在浪費自己的時間,也在浪費老闆為你開出的低廉的「租金」。

1.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生命週期

如果元件註冊驗證器,依次執行驗證.

4)更新模型值:如果所有的元件本地值轉換驗證等均成功,此時jsf就會根據el處理關聯的bean,並更新bean繫結值.在此處jsf會根據el繫結載入配置的後台bean。

5)呼叫應用:呼叫註冊的偵聽器,然後執行事件驅動,獲取下乙個檢視。偵聽器此時可以有效的偵聽到ui元件的各項資料,事件驅動部分即action可以有效的獲取被更新的後台bean資料。執行自己的業務邏輯。

6)渲染響應(render response)

到此請求處理結束,根據導航規則,渲染響應的頁面.依次執行…

在此我需要羅嗦一句,每當我看到員工把業務邏輯寫在actionlistener裡的時候,就有點窩火。actionlistener真正目的是讓開發者通過獲取觸發事件的元件,逐末求源,級聯操作其他元件(binding的使用),或者定性的操作觸發事件的元件資料,listener說白了,就是處理面向ui的資料操作。從更新模型之後的binding的ui中獲取三方附屬資料,如觸發action的元件的style,狀態,國際化,http等。而不是讓用來做業務處理的。action方法及事件驅動程式部分,才是用來做業務服務的,然後指定導航。。。

如果誰在亂寫,小心沒收你的「小弟弟」。。。。。。。。。

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是最普通...