升級(jí)JSF1.2的艱難之旅
最近由于項(xiàng)目的要求需要把JSF從1.1升級(jí)JSF1.2,這個(gè)過(guò)程中暴漏出JSF的一些不足,如下:
一,原來(lái)在1.1下運(yùn)行很正常的backing bean 不再正常了,調(diào)試之后發(fā)現(xiàn)有些backing bean 竟然是使用的包級(jí)私有的構(gòu)造函數(shù),但是很納悶怎么在1.1下正常而1.2下就實(shí)例化不了,可能是JSF 1.1 的實(shí)現(xiàn)中是利用反射機(jī)制進(jìn)行backing bean的初始化吧,而1.2又改成調(diào)用backing bean 的默認(rèn)構(gòu)造函數(shù)了,所以碰到包級(jí)私有構(gòu)造函數(shù)的backin bean 才出現(xiàn)無(wú)法實(shí)例化的異常吧。
二,JSF提供的組件中的那個(gè)SelectOneMenu個(gè)人認(rèn)為有一個(gè)不足之處,如果服務(wù)器端初始化組件樹時(shí)候有四個(gè)待選項(xiàng),到了客戶端頁(yè)面通過(guò) ajax對(duì)待選項(xiàng)進(jìn)行了修改,比如改成了五個(gè),這中情況下你頁(yè)面中的所有command類型的組件的方法綁定都會(huì)失效,跟蹤JSF源碼發(fā)現(xiàn)這個(gè) SelectOneMenu的Render中首先進(jìn)行了一個(gè)個(gè)人認(rèn)為畫蛇添足的校驗(yàn),它首先校驗(yàn)?zāi)闾峤簧蟻?lái)的那個(gè)值是否在組件初始化時(shí)候提供的待選項(xiàng)內(nèi),如果不是待選項(xiàng)中的某個(gè)則直接生命周期最后階段并忽略了中間的所有處理,包括你的方法綁定,這個(gè)問(wèn)題很隱蔽,一般很難發(fā)現(xiàn),這個(gè)校驗(yàn)個(gè)人認(rèn)為為客戶端使用 AJAX帶來(lái)了很大的麻煩,動(dòng)態(tài)修改下來(lái)菜單的選項(xiàng)是很普通的ajax應(yīng)用了(比如多級(jí)聯(lián)動(dòng)下拉菜單),為了給SelectOneMenu提供ajax能力我不得不重新實(shí)現(xiàn)了一個(gè)SelectOneMenu,現(xiàn)在我把工程升級(jí)JSF1.2,才發(fā)現(xiàn)JSF1.2的核心api正如官方所言沒有重大改動(dòng),只是統(tǒng)一了EL,但同時(shí)我確發(fā)現(xiàn)JSF的一些“不重要”的API改動(dòng)確很大,我自己開發(fā)的組件用了1.1中的**util類,可是現(xiàn)在發(fā)現(xiàn)那些靜態(tài)方法現(xiàn)在都沒有了,這時(shí)不得不再次重新寫一個(gè)SelectOneMenu,這回一點(diǎn)兒它的**util類也不用,免的下回升級(jí)JSF1.2還重寫。
三,JSF 1.1 RI中的commandLink居然把dom中的onClick()自己占用了,發(fā)現(xiàn)JSF1.2 RI又還回來(lái)了,這點(diǎn)還是做的不錯(cuò)的,不過(guò)卻發(fā)現(xiàn)JSF組件ID系統(tǒng)自動(dòng)生成的算法改了,1.1中如果你沒有給頁(yè)面上的組件指定ID那么JSF會(huì)按照某種算法自動(dòng)生成一個(gè),可是1.2中不但為這個(gè)自動(dòng)生成id的行為增加了一個(gè)“開關(guān)”,而且生成算法也改了,這回麻煩大了,當(dāng)初項(xiàng)目組中很多成員比較懶,頁(yè)面中的javascript直接就是用的那個(gè)自動(dòng)生成的ID,這回生成算法一改頁(yè)面中的大部分javascript都癱瘓了,唉,懶人??!
四,原來(lái)1.1與Spring整合的時(shí)候發(fā)現(xiàn)Spring提供的JSF變量解析器只能整合MyFaces,不得不使用了jsf-spring.jar進(jìn)行jsf RI+spring整合,現(xiàn)在突然發(fā)現(xiàn)JSF1.2 RI終于可以直接使用spring的變量解析器進(jìn)行整合了,這點(diǎn)兒還是不錯(cuò)的。表?yè)P(yáng)一下!
五,原來(lái)項(xiàng)目中的上傳下載使用了MyFaces的tomahawk組件包中的部分組件,可是到apache的網(wǎng)戰(zhàn)上一看雖然MyFaces-core出了1.2版本,但是tomahawk還仍然停留在1.1,唉!組件版本不兼容的煩惱啊!
小毛病還有很多就不一一列舉了,總體一句話,JSF還真是有待進(jìn)一步發(fā)展?。?/P>
【編輯推薦】