国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

選擇JSF不選Struts的十大理由

2024-07-21 02:14:20
字體:
來源:轉載
供稿:網友
中國最大的web開發資源網站及技術社區,

我的一個客戶不知道該選用struts還是jsf。就像你預料的那樣,我通常會問:這2中框架之間有什么區別?當然,除了我的這個客戶外很多人都面臨這樣的選擇。

總的來說,我建議在新項目中優先考慮jsf。雖然常常有一些商業上的因素迫使我們為現有的項目選擇了struts,而且那些解決方案還有待考驗,但是,讓我們面對一個事實:jsf比struts好多了。

下面是我選擇jsf而不選struts的十大理由:

1.components(組件)

2.renderkits

3.renderers

4.valuebindingexpressions(值綁定表達式)

5.eventmodel(事件模型)

6.extensibility(可擴展性)

7.managedbeans(dependencyinjection依賴注入)

8.pojoactionmethods

9.jsfisthestandardjava-basedwebappframework(jsf是javaweb應用程序的標準框架)

10.there'sonlyonestruts(只有一個struts)

10.there'sonlyonestruts(只有一個struts)

struts是一個開源產品,然而jsf是一個標準。這個細節常常被新的jsf學習者忽略,其實這是顯而易見的,因為我們有多個jsf的實現。雖然jsf還很不成熟,但是我們已經有了2個優秀的jsf實現可以選擇:sun的參考實現和apache的myfaces。另一方面,我們只有一個struts。

9.jsfisthestandard(jsf是標準)

jee5.0要提供一個jsf的實現,這表明jsf不久將會無處不在。這可能與你無關,但是和工具供應商密切相關。現在大概有50個javaweb應用程序框架,工具供應商不會情愿去支持一個特別的框架,但是他們會毫不猶豫的去支持一個標準。而且不止供應商,開源項目也會迅速的聚集在jsf的四周,爭先恐后的去實現相同的功能。比如說,直到我們去實現本質上和shale的tapestry差不多的視圖的時候,我才知道facalets。(從長遠來看,我相信這種冗余是件好事,會給我們帶來好處)

8.pojoactionmethods

struts的行為是和struts的api綁定在一起的,但是jsf的行為方法可以在pojpo中實現。這意味著你不用在表單和模型對象之間實現一個多余的行為層。順便說一下,在jsf里面沒有行為對象,行為在模型對象中實現。但是也請注意一點:如果你愿意你也可以生成與jsf獨立的行為對象。在struts里面,你有formbean和actionbean。formbean包含數據而actionbean包含邏輯。oo狂會想去合并前2者,在struts你辦不到。但是在jsf中,你可以分開數據和邏輯,也可以合并到一個對象中,一切由你決定。

7.managedbeans(dependencyinjection依賴注入)

和spring一樣,jsf也使用了依賴注入(dj)(或控制反轉(ioc))去實例化和初始化bean。struts的確為你生成了formbean和actionbean,但是jsf可以為你生成各種各樣的managedbean。
 

6.extensibility(可擴展性)

這個很重要。jsf有6個對象實現了這個框架的大部分功能,而且你可以很容易的用你自己的實現代替原有實現。比如你想加一個自定義參數在jsf表達式語言里面,或是添加一個自己的視圖控制器以便于區分組件和html。事實上shale實現了上面的功能。如果你還沒有滿足,jsf提供了幾個地方你可以輕松的控制jsf的生命周期。shale給你的會更多。

5.eventmodel(事件模型)

jsf的事件模型使你可以對值改變,動作,jsf生命周期階段變換等作出反應。在jsf1.1中,那些事件都是在服務器端處理的,這肯定是一個缺陷,好在jsf2.0計劃支持客戶端事件,拭目以待吧。

4.valuebindingexpressions(值綁定表達式)

在struts中,你負責把數據從form傳遞到模型對象。你實現的action的execute方法是把form作為一個參數。然后你再手動的把數據從formbean里面取出放到模型對象里面。你要為應用里面的每個form做這些事情,然而在jsf里面,你只需像這樣:#{model.property}就夠了,其他的交給jsf來處理。

3.renderers

你有看過struts的標簽的源代碼嗎?它直接生成html。jsf組件標簽什么都不生成,它和服務器上的一對component-renderer對應。component維護組件狀態,rendered負責獲得視圖。重點是renderers是可插拔的,即你可以根據自己需求實現然后替代掉默認實現。比如說我在nfjs上面的felix談話中舉例說明了怎么去實現一個自定義的labelrenderer。你只需要配置你的renderer,jsf就會自動在你的應用程序里面使用他。

2.renderkits

在幾年前我曾經有份struts咨詢工作,我們必須同時支持瀏覽器和無線設備,非常痛苦。但是用jsf來完成那個任務非常容易,因為你可以生成你自己的renderkit-為一種特定顯示技術的renderers的集合-然后配置到jsf里面。

1.components(組件)

組件是struts和jsf之間最大的區別。就像swing一樣,jsf提供豐富的底層構件去開發組件然后添加到標準的組件集。那些底層構件讓你很容易的生成自己的組件并且和別人共享。現在我們到處都能看到自定義組件跳出來,比如說oracle的adf和myfaces,兩者都提供了豐富的組件集,就像javascript日歷,tree等等。當然,組件只是一部分。典型的是,組件都和一個獨立的renderer對應,這給我們帶來了真正的好處(看第3條)。但是和jsf中的很多東西一樣,你不一定要墨守成規。只要你愿意,你可以實現render自己的組件,雖然這樣你會失去給組件加入別的renderer的能力。

有很多只能意會不能言傳啊,比如renderer等。翻譯得不好,大家可以去看看原文。原文出自davidgeary'sblog,原文地址為:http://jroller.com/comments/dgeary/weblog/

來源:http://blog.csdn.net/cqluojia/services/trackbacks/

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 团风县| 冕宁县| 威海市| 峡江县| 皋兰县| 朝阳市| 博野县| 花垣县| 察雅县| 孟村| 长春市| 南郑县| 盐源县| 上蔡县| 博爱县| 壤塘县| 调兵山市| 东城区| 班玛县| 张家界市| 鹤岗市| 八宿县| 陵川县| 合作市| 蒙阴县| 建水县| 丽水市| 海南省| 山阳县| 南郑县| 通山县| 朝阳市| 房产| 吴堡县| 沁阳市| 桐梓县| 宣汉县| 龙井市| 桃园市| 万全县| 建德市|