自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺談JSF的生命周期和對(duì)ajax處理的影響

開發(fā) 后端
本文介紹JSF的生命周期和對(duì)ajax處理的影響,以及解讀JSF的生命周期。

JSF一個(gè)最重要的特點(diǎn)就是組件化(It is all about components),組件化的特點(diǎn)決定了其可擴(kuò)展性強(qiáng)和協(xié)議無(wú)關(guān)性。對(duì)一個(gè)JSF組件來(lái)說(shuō),為其定義特定的Render,該該組件將在WML或telnet中可用。

解讀JSF的生命周期:
我覺(jué)得研究B/S系統(tǒng)***的方法就是從web.xml開始,相比于傳統(tǒng)的JSP系統(tǒng),JSF需要定義一個(gè)Servlet用來(lái)對(duì)HttpServletRequest進(jìn)行處理,該servlet為javax.faces.webapp.FacesServlet。在該 servlet初始化階段,它將生成兩個(gè)對(duì)象:FacesContextFactory和Lifecycle。而在處理請(qǐng)求的service階段,則會(huì)利用FacesContextFactory對(duì)象獲得當(dāng)前的FacesContext,lifecycle對(duì)象將會(huì)對(duì)該context對(duì)象進(jìn)行處理。簡(jiǎn)單的來(lái)說(shuō),F(xiàn)acesServlet產(chǎn)生一個(gè)FacesContext對(duì)象,(在JSF的處理過(guò)程中,F(xiàn)acesContext是唯一被修改的對(duì)象),然后將控制權(quán)交給了lifecycle對(duì)象,Lifecycle對(duì)象將會(huì)在六個(gè)生命周期中對(duì)FacesContext對(duì)象進(jìn)行處理。有一點(diǎn)需要注意的:FacesContext是ThreadLocal的。
JSF包含六個(gè)生命周期:
1. Restore view
2. Apply request values; process events
3. Process validations; process events
4. Update model values; process events
5. Invoke application; process events
6. Render response

其中的1-5個(gè)階段將會(huì)執(zhí)行l(wèi)ifecycle的execute()方法,而第六個(gè)階段將會(huì)執(zhí)行l(wèi)ifecycle的render()方法。

接下來(lái)說(shuō)說(shuō)如何將Ajax的應(yīng)用體現(xiàn)在JSF組件上:

1. Ajax完全獨(dú)立于JSF。即為Ajax請(qǐng)求創(chuàng)建一個(gè)額外的Servlet/Filter 控制器,這也是最自然而然的想法。通過(guò)傳統(tǒng)的Ajax請(qǐng)求方式完成該jsf組件的Ajax體現(xiàn),該Ajax請(qǐng)求通過(guò)jsf組件中寫入的js觸發(fā)。優(yōu)點(diǎn)是自然,不需要接觸JSF層面的東西,比較獨(dú)立;缺點(diǎn)是重用性差,且頁(yè)面開發(fā)者必須自己寫js代碼。

2. Ajax嵌入JSF組件中,即需要自定義組件。該方法與方法1很相似,不同的是組件開發(fā)者將會(huì)封裝js代碼和js請(qǐng)求獲得的呈現(xiàn)代碼。即Ajax應(yīng)用已經(jīng)包裝在此組件中了,頁(yè)面開發(fā)者不需要關(guān)心該Ajax應(yīng)用是如何完成的,只需要簡(jiǎn)單調(diào)用該組件就可以了。在Lifecycle的Apply Request Values階段,當(dāng)Ajax請(qǐng)求處理完后,該組件的Renderer將會(huì)調(diào)用FacesContext的responseComplete()方法退出 lifecycle。

3. 使用PhaseListener判斷是否為Ajax請(qǐng)求,如是,立即執(zhí)行responseComplete()方法,禁止進(jìn)入JSF的生命周期以后的 Phase??聪翽haseListener接口的代碼,相信用過(guò)Spring的都覺(jué)得似曾相識(shí),沒(méi)錯(cuò),它提供了2個(gè)方法beforePhase()和 afterPhase()用來(lái)對(duì)生命周期中的每一個(gè)phase進(jìn)行pre-action和post-action處理。比較類似Spring中的 advice。一般選擇在PhaseListner的afterPhase()方法中進(jìn)行Ajax處理,處理的過(guò)程其實(shí)也很簡(jiǎn)單,當(dāng)請(qǐng)求到達(dá)服務(wù)器端,PhaseListener進(jìn)行處理,當(dāng)Restore View階段完成后如果是Ajax請(qǐng)求則進(jìn)入afterPhase()方法中,進(jìn)行Ajax處理然后調(diào)用FacesContext的 responseComplet()方法完成lifecycle的處理。這也是目前用的最多的一種處理方法。

4. 定義獨(dú)立的Lifecycle,該Lifecycle只包含三個(gè)Phase,即:Apply Request Values; Invoke Application;RenderResponse。在進(jìn)入lifecycle之前就判斷到底進(jìn)入何種lifecycle,如果是Ajax請(qǐng)求則進(jìn)入剛定義的包含三個(gè)階段的生命周期,否則則進(jìn)入常規(guī)的六階段生命周期。其做法就是定義一個(gè)類似FacesServlet的選擇Lifecycle的 servlet,對(duì)指定的Ajax請(qǐng)求(通過(guò)url mapping)進(jìn)行處理。以上是JSF的生命周期和對(duì)Ajax處理的影響

【編輯推薦】

  1. 使JSF支持帶有HTMLMessage
  2. 利用JSF和Hibernate構(gòu)建Web應(yīng)用
  3. 比較JSF、Spring MVC、Stripes、Struts 2、Tapestry、Wicket
  4. JSF能否拯救WEB
  5. 各種JSF框架比較
責(zé)任編輯:佚名 來(lái)源: JavaEye
相關(guān)推薦

2009-06-11 11:28:35

JSF生命周期

2009-06-24 10:47:55

JSF生命周期

2009-06-24 10:34:39

JSF生命周期JSF應(yīng)用程序

2009-06-18 13:32:39

Java線程生命周期

2015-07-08 16:28:23

weak生命周期

2024-06-03 08:00:00

2009-08-04 16:05:15

ASP.NET頁(yè)面生命

2022-06-01 09:25:16

嵌套生命周期智能技術(shù)工業(yè)資產(chǎn)

2022-04-19 07:20:24

軟件開發(fā)安全生命周期SSDLC應(yīng)用安全

2012-05-28 15:37:20

WP程序生命周期

2012-04-28 13:23:12

Java生命周期

2011-06-16 09:31:21

ActivityAndroid

2010-07-14 10:48:37

Perl線程

2023-12-18 08:24:56

ViewModel數(shù)據(jù)操作Android

2010-07-14 10:59:15

Perl線程

2015-07-09 15:42:48

ios應(yīng)用生命周期

2021-02-14 00:39:57

機(jī)器學(xué)習(xí)技術(shù)人工智能

2013-06-18 10:48:41

OpenSUSEOpenSUSE 12

2024-01-08 22:08:48

Rust生命周期編程

2009-07-31 17:53:39

ASP.NET線程安全
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)