component:所有的基本組件都在其中,如下的主要類圖,對(duì)于各個(gè)組件就不一一詳細(xì)介紹了。主要介紹一下幾個(gè)接口:
StateHolder:用于表示在請(qǐng)求之間需要保存相應(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ī)范中增加的,提供了對(duì)于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)了對(duì)于DataTable的支持,以及SelectItems。
render:主要的展示包,當(dāng)然只是提供規(guī)范,具體由實(shí)現(xiàn)類提供。對(duì)于Renderer,都需要一套R(shí)enderKit.而RenderKit由RenderKitFactory管理。ResponseStateManager,作為StateManager的幫助類,進(jìn)行主要的State操作。
基本上,規(guī)范也就這么些東東。從整體來看,并不算太復(fù)雜??上КF(xiàn)在的jsf實(shí)現(xiàn)實(shí)在太多了,而且各個(gè)實(shí)現(xiàn)并不一定兼容,導(dǎo)致了jsf世界的龐大。