程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2EE >> 升級JSF1.2的艱難之旅

升級JSF1.2的艱難之旅

編輯:J2EE

最近由於項目的要求需要把JSF從1.1升級JSF1.2,這個過程中暴漏出JSF的一些不足,如下:

一,原來在1.1下運行很正常的backing bean 不再正常了,調試之後發現有些backing bean 竟然是使用的包級私有的構造函數,但是很納悶怎麼在1.1下正常而1.2下就實例化不了,可能是JSF 1.1 的實現中是利用反射機制進行backing bean的初始化吧,而1.2又改成調用backing bean 的默認構造函數了,所以碰到包級私有構造函數的backin bean 才出現無法實例化的異常吧。

二,JSF提供的組件中的那個SelectOneMenu個人認為有一個不足之處,如果服務器端初始化組件樹時候有四個待選項,到了客戶端頁面通過 ajax對待選項進行了修改,比如改成了五個,這中情況下你頁面中的所有command類型的組件的方法綁定都會失效,跟蹤JSF源碼發現這個 SelectOneMenu的Render中首先進行了一個個人認為畫蛇添足的校驗,它首先校驗你提交上來的那個值是否在組件初始化時候提供的待選項內,如果不是待選項中的某個則直接生命周期最後階段並忽略了中間的所有處理,包括你的方法綁定,這個問題很隱蔽,一般很難發現,這個校驗個人認為為客戶端使用 AJAX帶來了很大的麻煩,動態修改下來菜單的選項是很普通的ajax應用了(比如多級聯動下拉菜單),為了給SelectOneMenu提供AJax能力我不得不重新實現了一個SelectOneMenu,現在我把工程升級JSF1.2,才發現JSF1.2的核心api正如官方所言沒有重大改動,只是統一了EL,但同時我確發現JSF的一些“不重要”的API改動確很大,我自己開發的組件用了1.1中的**util類,可是現在發現那些靜態方法現在都沒有了,這時不得不再次重新寫一個SelectOneMenu,這回一點兒它的**util類也不用,免的下回升級JSF1.2還重寫。

三,JSF 1.1 RI中的commandLink居然把dom中的onClick()自己占用了,發現JSF1.2 RI又還回來了,這點還是做的不錯的,不過卻發現JSF組件ID系統自動生成的算法改了,1.1中如果你沒有給頁面上的組件指定ID那麼JSF會按照某種算法自動生成一個,可是1.2中不但為這個自動生成id的行為增加了一個“開關”,而且生成算法也改了,這回麻煩大了,當初項目組中很多成員比較懶,頁面中的Javascript直接就是用的那個自動生成的ID,這回生成算法一改頁面中的大部分Javascript都癱瘓了,唉,懶人啊!

四,原來1.1與Spring整合的時候發現Spring提供的JSF變量解析器只能整合MyFaces,不得不使用了jsf-spring.jar進行jsf RI+spring整合,現在突然發現JSF1.2 RI終於可以直接使用spring的變量解析器進行整合了,這點兒還是不錯的。表揚一下!

五,原來項目中的上傳下載使用了MyFaces的tomahawk組件包中的部分組件,可是到apache的網戰上一看雖然MyFaces-core出了1.2版本,但是tomahawk還仍然停留在1.1,唉!組件版本不兼容的煩惱啊!

小毛病還有很多就不一一列舉了,總體一句話,JSF還真是有待進一步發展啊!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved