JSF在很大程度上類似Struts,而不是類似Tapestry,可以說是一種Struts 2.0,都是采取標簽庫+組件的形式,只是JSF的組件概念沒有象Struts那樣必須繼承ActionForm的限制;JSF在事件粒度上要細膩,不象Struts那樣,一個表單一個事件,JSF可以細化到表單中的每個字段上。
JSF只有在組件和事件機制這個概念上類似Tapestry,但是不似Tapestry那樣是一個完全組件的框架,所以,如果你做一個對頁面要求靈活度相當高的系統,選用Tapestry是第一考慮。
Struts/JSF則適合在一般的數據頁面錄入的系統中,對于Struts和JSF的選用,我目前個人觀點是:如果你是一個新的系統,可以直接從JSF開始;如果你已經使用Struts,不必轉換,如果需要切換,可以將JSF和Tapestry一起考慮。
另外,JSF/Tapestry不只是支持Html,也支持多種客戶端語言如WML或XUI等。
這三者之間關系:如果說Struts是左派;那Tapestry則是右派;而JSF則是中間派,中庸主義是SUN聯盟的一貫策略。
當然,你也可以發表你在實踐中這三者任何一個的使用感受,以使得后來者有一個比較。
我們通過下表來比較這 三種框架在實現上圖各個功能時技術細節,從而得出他們的異同點和偏重點。
|
Struts |
Tapestry3.0 |
JSF |
在View顯示的組件要求 |
組件必須繼承ActionForm |
分顯式調用和隱式調用 組件必須繼承BaseComponent |
普通POJO 無需繼承 Managed Bean |
組件在View顯示粒度 |
View頁面只能顯示與表單對應的ActionForm,配置中Action ActionForm 頁面一般只能1:1:1關系。 |
可將組件嵌入頁面任何一行,對使用組件數量無限制。 |
同Tapestry |
頁面分區tiles |
使用Tiles標簽庫實現,需要另外tiles-def.xml配置文件 |
組件有自己的視圖頁面,通過調用組件即直接實現多個頁面組合。強大自然的頁面組合是其特點。 |
通過組件+標簽庫實現Subview,但如需重用Layout,還要結合Tiles. |
頁面跳轉 |
使用標簽庫html:link中寫明目標URL,URL名稱需要對照配置文件的path命名,與組件Action耦合。 |
URL名稱是目標的組件名稱,不涉及URL和路徑等操作,方便穩固。 |
類似Struts,也需要在配置文件中查找,與組件分離。 |
參數傳遞 |
使用html:link時傳遞參數超過一個以上處理麻煩。 |
直接調用組件,直接賦予參數,沒有參數個數限制 |
參數分離傳遞給組件 |
事件觸發 |
通過表單提交submit激活,不能細化到表單里字段。 |
能夠給于表單每個字段貼一個事件,事件組件必須實現PageListener接口 |
同Tapestry,事件組件必須實習ActionListener 接口 | |