學(xué)習(xí)JSF的生命周期
OO中的事件,是對(duì)象通信的一種機(jī)制,對(duì)象通過(guò)響應(yīng)彼此的事件相互協(xié)調(diào)一致。JSP沒(méi)有事件,所以JSP的代碼需要程序員自己去協(xié)調(diào),什么時(shí)候執(zhí)行什么代碼,往往讓程序員大費(fèi)周章。如果說(shuō)JSP代碼是一群孩子的話,那么程序員就是這群孩子可憐的父母,吃喝拉撒全要操心,哪里能夠集中精力做點(diǎn)事情!所以,小孩要上學(xué),學(xué)知識(shí)可能只是一個(gè)借口,父母想找個(gè)老師代管,才是背后真正的原因。
JSF就是程序員們所要尋找的老師,把代碼片斷交給JSF去管理,程序員就可以集中精力編寫(xiě)業(yè)務(wù)邏輯了。在JSF里,有四類(lèi)事件。值改變事件,當(dāng)用戶在輸入框中輸入數(shù)據(jù)后發(fā)生;動(dòng)作事件,當(dāng)用戶提交Form時(shí)發(fā)生;數(shù)據(jù)模型事件,當(dāng)數(shù)據(jù)表的某行被選中時(shí)發(fā)生;生命周期事件,當(dāng)生命周期從一個(gè)階段進(jìn)入另一個(gè)階段時(shí)發(fā)生。除了生命周期事件,其他事件都是桌面程序中大家所熟知的,而生命周期事件可以想象成窗口事件,例如窗口的生成、關(guān)閉、激活等等。
談到JSF,就不能不談?wù)凧SF請(qǐng)求處理的生命周期。為什么很多人覺(jué)得JSF難學(xué)?都是生命周期惹的禍。JSP的生命周期只有一個(gè)階段,而JSF卻有6個(gè)階段!為什么要這樣呢?其實(shí),這是JSF框架所必需的。JSF只有細(xì)分生命周期階段,才能對(duì)Request和Response施加粒度足夠細(xì)的控制,因?yàn)镴SP那樣粗粒度的控制,不足以支撐UI組件模型和事件模式。
在我初學(xué)JSF時(shí),生命周期成了我最大的障礙。不管我如何咬文嚼字地推敲JSF規(guī)范中關(guān)于生命周期的描述,我都無(wú)法弄明白到底專(zhuān)家們?cè)谡f(shuō)什么。甚至直到我完成了我的首個(gè)JSF程序的開(kāi)發(fā),我還是不懂。這讓我十分的惴惴不安,時(shí)時(shí)擔(dān)心自己誤入歧途。奇怪的是,不論是Sun的Tutorial,還是JSF的官方規(guī)范都把生命周期放在“頭版頭條”的位置,一開(kāi)篇就大肆推銷(xiāo)生命周期概念,生命周期真的那么重要嗎?
這絕對(duì)是一個(gè)錯(cuò)誤!生命周期是JSF的核心,但不是程序員的必修課,初涉JSF的程序員,根本沒(méi)有必要浪費(fèi)精力在生命周期晦澀的概念里糾纏,不懂生命周期,照樣可以用JSF來(lái)編程。花很少的時(shí)間看看各個(gè)UI組件的功能和屬性,然后弄明白各類(lèi)事件的含義以及應(yīng)該如何響應(yīng)這些事件,了解一下JSF可配置的頁(yè)面導(dǎo)航機(jī)制,再搞清楚Managed Bean是什么東西,馬上就可以動(dòng)手編寫(xiě)你的第一個(gè)JSF程序了!
生命周期當(dāng)然重要,不理解生命周期是難以在JSF中深入下去的。但是,如果有機(jī)會(huì)讓我來(lái)寫(xiě)JSF的入門(mén)教程的話,我會(huì)把生命周期放在最后一章,等大家都有了JSF的實(shí)踐經(jīng)驗(yàn),對(duì)JSF是如何簡(jiǎn)化Java的Web編程有了感性的認(rèn)識(shí),再來(lái)深入剖析JSF的生命周期,才能水到渠成,一點(diǎn)就通。
【編輯推薦】