接上一篇內(nèi)容。這次主要分析一下jsf的相關(guān)組件包,也是jsf和structs主要不同的地方。jsf 規(guī)范中,對于組件的設(shè)計(jì),和其他組件架構(gòu)一樣,分離表現(xiàn)層和模型層。對于組件的render由具體的Renderer來處理,這也達(dá)到了Model和View分離的原則。
component:所有的基本組件都在其中,如下的主要類圖,對于各個(gè)組件就不一一詳細(xì)介紹了。主要介紹一下幾個(gè)接口:

StateHolder:用于表示在請求之間需要保存相應(yīng)的狀態(tài)信息,必須實(shí)現(xiàn)saveState和resotreState方法。
ValueHolder:用于支持本地值的保持,用于訪問model數(shù)據(jù),通過表達(dá)式,支持轉(zhuǎn)換。
EditableValueHolder:用于表示那些可以編輯的組件值
ActionSource:由UIComponet實(shí)現(xiàn),用于作為ActionEvent的事件源,支持默認(rèn)的ActionListener調(diào)用
ActionSource2:這是最近的規(guī)范中增加的,提供了對于MethodExpression的支持。
ContextCallback:用于組件執(zhí)行相應(yīng)的回調(diào)
NamingContainer:標(biāo)志接口,表示容器組件
convert:包括了主要的Convert接口,以及內(nèi)置的Convert實(shí)現(xiàn)類,主要的作用用于在頁面值綁定時(shí),進(jìn)行類型的轉(zhuǎn)換工作
validator:主要的驗(yàn)證包,定義了通過的Validator接口,以及簡單的幾個(gè)驗(yàn)證類。默認(rèn)情況下,jsf都是進(jìn)行服務(wù)端驗(yàn)證,如果想需要客戶端驗(yàn)證,暫時(shí)從規(guī)范中,還沒有找出相應(yīng)的解決方案。不過現(xiàn)在已經(jīng)是Ajax時(shí)代了,使用異步的傳輸,從效果上已經(jīng)接近于客戶端之間驗(yàn)證。
event:主要的事件體系。個(gè)人覺得jsf的事件體系還是比較弱的。和強(qiáng)大的Swing事件體制相比,那簡直差遠(yuǎn)了。而且jsf默認(rèn)使用一個(gè)ActionListener來委派所有的客戶端動(dòng)作觸發(fā)。大多數(shù)的調(diào)用都是使用MethodExpression來進(jìn)行。
model:只是加強(qiáng)了對于DataTable的支持,以及SelectItems。
render:主要的展示包,當(dāng)然只是提供規(guī)范,具體由實(shí)現(xiàn)類提供。對于Renderer,都需要一套RenderKit.而RenderKit由RenderKitFactory管理。ResponseStateManager,作為StateManager的幫助類,進(jìn)行主要的State操作。
基本上,規(guī)范也就這么些東東。從整體來看,并不算太復(fù)雜??上КF(xiàn)在的jsf實(shí)現(xiàn)實(shí)在太多了,而且各個(gè)實(shí)現(xiàn)并不一定兼容,導(dǎo)致了jsf世界的龐大。
posted on 2007-04-25 16:33
布衣郎 閱讀(2806)
評論(2) 編輯 收藏 所屬分類:
web view技術(shù)