study of javaserver faces lifecycle
JavaServer Faces應(yīng)用程序的生命周期在客戶端為頁(yè)面發(fā)出HTTP請(qǐng)求時(shí)開(kāi)始,并在服務(wù)器響應(yīng)該頁(yè)面并轉(zhuǎn)換為HTML時(shí)結(jié)束。
通常將JSF的生命周期分為兩個(gè)階段:
#執(zhí)行階段
#渲染階段
1.執(zhí)行階段
JavaServer Faces應(yīng)用程序生命周期執(zhí)行階段包含以下子階段:
恢復(fù)視圖:在內(nèi)存中恢復(fù)或創(chuàng)建代表客戶端用戶界面信息的服務(wù)器端組件樹(shù)(視圖)。
應(yīng)用請(qǐng)求值:用來(lái)自客戶端的最新數(shù)據(jù)更新這些服務(wù)器端組件。
處理驗(yàn)證:對(duì)新數(shù)據(jù)執(zhí)行驗(yàn)證和數(shù)據(jù)類型轉(zhuǎn)換。
更新模型值:用新數(shù)據(jù)更新服務(wù)器端模型對(duì)象。
調(diào)用應(yīng)用程序:調(diào)用滿足請(qǐng)求所需要的應(yīng)用程序邏輯,然后如果有需要,再導(dǎo)航到新頁(yè)面。
渲染響應(yīng):把響應(yīng)渲染給請(qǐng)求客戶端。
JSF 請(qǐng)求—響應(yīng)生命周期的步驟:
1.1恢復(fù)視圖階段
當(dāng)客戶端請(qǐng)求一個(gè)JavaServer Faces頁(yè)面時(shí),JavaServer Faces實(shí)現(xiàn)開(kāi)始恢復(fù)視圖階段。 在此階段,JSF將視圖中的組件構(gòu)建為請(qǐng)求頁(yè)面,線性事件處理程序和驗(yàn)證器的視圖,并將視圖保存在FacesContext實(shí)例中。
如果對(duì)該頁(yè)面的請(qǐng)求是回發(fā),那么與該頁(yè)面相對(duì)應(yīng)的視圖已經(jīng)存在于FacesContext實(shí)例中。 在此階段,JavaServer Faces實(shí)現(xiàn)通過(guò)使用保存在客戶端或服務(wù)器上的狀態(tài)信息來(lái)還原視圖。
1.2應(yīng)用請(qǐng)求值階段
在此階段,在回發(fā)請(qǐng)求期間恢復(fù)組件樹(shù)。 組件樹(shù)是表單元素的集合。樹(shù)中的每個(gè)組件通過(guò)使用其decode(processDecodes())方法從請(qǐng)求參數(shù)中提取其新值。 之后,該值將本地存儲(chǔ)在每個(gè)組件上。
如果任何解碼方法或事件偵聽(tīng)器在當(dāng)前FacesContext實(shí)例上調(diào)用了renderResponse方法,則JavaServer Faces實(shí)現(xiàn)將跳過(guò)“渲染響應(yīng)”階段。?
如果任何事件在此階段已排隊(duì),則JavaServer Faces實(shí)現(xiàn)將事件廣播到有興趣的監(jiān)聽(tīng)器。?
如果應(yīng)用程序需要重定向到其他Web應(yīng)用程序資源或生成不包含任何JavaServer Faces組件的響應(yīng),則可以調(diào)用FacesContext.responseComplete()方法。?
如果當(dāng)前請(qǐng)求被識(shí)別為部分請(qǐng)求,則從FacesContext檢索部分上下文,并應(yīng)用部分處理方法。
1.3流程驗(yàn)證階段
在此階段,JavaServer Faces通過(guò)使用其validate()方法來(lái)處理在組件上注冊(cè)的所有驗(yàn)證器。 它檢查指定驗(yàn)證規(guī)則的組件屬性,并將這些規(guī)則與為組件存儲(chǔ)的本地值進(jìn)行比較。 JavaServer Faces還完成了沒(méi)有將immediate屬性設(shè)置為true的輸入組件的轉(zhuǎn)換。
如果任何驗(yàn)證方法或事件偵聽(tīng)器在當(dāng)前FacesContext上調(diào)用了renderResponse方法,則JavaServer Faces實(shí)現(xiàn)將跳過(guò)“渲染響應(yīng)”階段。?
如果應(yīng)用程序需要重定向到不同的Web應(yīng)用程序資源或生成不包含任何JavaServer Faces組件的響應(yīng),則可以調(diào)用FacesContext.responseComplete方法。?
如果事件在此階段已排隊(duì),則JavaServer Faces實(shí)現(xiàn)將它們廣播給有興趣的監(jiān)聽(tīng)器。?
如果當(dāng)前請(qǐng)求被識(shí)別為部分請(qǐng)求,則從FacesContext檢索部分上下文,并應(yīng)用部分處理方法。
1.4更新模型值階段
確保數(shù)據(jù)有效后,它遍歷組件樹(shù),并將相應(yīng)的服務(wù)器端對(duì)象屬性設(shè)置為組件的本地值。 JavaServer Faces實(shí)現(xiàn)只更新輸入組件的value屬性指向bean屬性。 如果本地?cái)?shù)據(jù)無(wú)法轉(zhuǎn)換為bean屬性指定的類型,生命周期將直接前進(jìn)到“渲染響應(yīng)”階段,以便重新呈現(xiàn)頁(yè)面并顯示錯(cuò)誤。
如果任何updateModels方法或任何監(jiān)聽(tīng)器在當(dāng)前FacesContext實(shí)例上調(diào)用了renderResponse()方法,則JavaServer Faces實(shí)現(xiàn)將跳過(guò)“渲染響應(yīng)”階段。?
如果應(yīng)用程序需要重定向到其他Web應(yīng)用程序資源或生成不包含任何JavaServer Faces組件的響應(yīng),則可以調(diào)用FacesContext.responseComplete()方法。?
如果任何事件在此階段已排隊(duì),JavaServer Faces實(shí)現(xiàn)將它們廣播到有興趣的監(jiān)聽(tīng)器。?
如果當(dāng)前請(qǐng)求被識(shí)別為部分請(qǐng)求,則從FacesContext檢索部分上下文,并應(yīng)用部分處理方法。
1.5調(diào)用應(yīng)用階段
在此階段,JSF處理應(yīng)用程序級(jí)事件,例如提交表單或鏈接到另一個(gè)頁(yè)面。?
現(xiàn)在,如果應(yīng)用程序需要重定向到其他Web應(yīng)用程序資源或生成不包含任何JSF組件的響應(yīng),則可以調(diào)用FacesContext.responseComplete()方法。
之后,JavaServer Faces實(shí)現(xiàn)將控制轉(zhuǎn)移到“渲染響應(yīng)”階段。
1.6渲染響應(yīng)階段
這是JSF生命周期的最后階段。 在此階段,JSF將構(gòu)建視圖并將權(quán)限委托給相應(yīng)的資源來(lái)呈現(xiàn)頁(yè)面。
如果這是初始請(qǐng)求,則頁(yè)面上表示的組件將被添加到組件樹(shù)中。?
如果這不是初始請(qǐng)求,組件已經(jīng)添加到樹(shù)中,不需要再添加。?
如果請(qǐng)求是回應(yīng),并且在應(yīng)用請(qǐng)求值階段,過(guò)程驗(yàn)證階段或更新模型值階段期間遇到錯(cuò)誤,則在此階段將再次呈現(xiàn)原始頁(yè)面。?
如果頁(yè)面包含h:message或h:messages標(biāo)簽,頁(yè)面上會(huì)顯示任何排隊(duì)的錯(cuò)誤消息。?
在渲染視圖的內(nèi)容之后,保存響應(yīng)的狀態(tài),以便后續(xù)請(qǐng)求可以訪問(wèn)它。 恢復(fù)視圖階段可以使用保存的狀態(tài)。
2.渲染階段
在此階段,請(qǐng)求的視圖作為對(duì)客戶端瀏覽器的響應(yīng)。 視圖渲染是以HTML或XHTML生成輸出的過(guò)程。 所以,用戶可以在瀏覽器看到它。
在渲染過(guò)程中采取以下步驟。
當(dāng)客戶端對(duì)index.xhtml網(wǎng)頁(yè)進(jìn)行初始請(qǐng)求時(shí),編譯應(yīng)用程序。
應(yīng)用程序在編譯后執(zhí)行,并為應(yīng)用程序構(gòu)建一個(gè)新的組件樹(shù),并放置在FacesContext中。
使用由EL表達(dá)式表示的組件和與其關(guān)聯(lián)受托管bean屬性填充組件樹(shù)。
基于組件樹(shù)。 建立了新的視圖。
該視圖作為響應(yīng)呈現(xiàn)給請(qǐng)求客戶端。
組件樹(shù)被自動(dòng)銷毀。
在后續(xù)請(qǐng)求中,重新構(gòu)建組件樹(shù),并應(yīng)用已保存的狀態(tài)。
轉(zhuǎn)載于:https://www.cnblogs.com/jlp6057/p/9385077.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的study of javaserver faces lifecycle的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [BZOJ 1048] [HAOI200
- 下一篇: Topcoder SRM 628 DIV