☆藍(lán)色夢(mèng)想☆

          世界總是反反覆覆錯(cuò)錯(cuò)落落地飄去 來不及嘆息 生活不是平平淡淡從從容容的東西 不能放棄
          posts - 57, comments - 5, trackbacks - 0, articles - 0

          選擇JSF不選Struts

          Posted on 2005-12-08 09:44 ☆藍(lán)色夢(mèng)想☆ 閱讀(314) 評(píng)論(0)  編輯  收藏 所屬分類: JSF
          一個(gè)客戶不知道該選用Struts還是JSF。就像你預(yù)料的那樣,我通常會(huì)問:這2中框架之間有什么區(qū)別?當(dāng)然,除了我的這個(gè)客戶外很多人都面臨這樣的選擇。

              總的來說,我建議在新項(xiàng)目中優(yōu)先考慮JSF。雖然常常有一些商業(yè)上的因素迫使我們?yōu)楝F(xiàn)有的項(xiàng)目選擇了Struts,而且那些解決方案還有待考驗(yàn),但是,讓我們面對(duì)一個(gè)事實(shí):JSF比Struts好多了。

              下面是我選擇JSF而不選Struts的十大理由:

          • 1.Components(組件)
          • 2.Render Kits
          • 3.Renderers
          • 4.Value Binding Expressions(值綁定表達(dá)式)
          • 5.Event Model(事件模型)
          • 6.Extensibility(可擴(kuò)展性)
          • 7.Managed Beans(Dependency Injection 依賴注入)
          • 8.POJO Action Methods
          • 9.JSF is the standard Java-based web app framework (JSF是java web應(yīng)用程序的標(biāo)準(zhǔn)框架)
          • 10.There's only one Struts(只有一個(gè)Struts)

              10.There's only one Struts(只有一個(gè)Struts) Struts 是一個(gè)開源產(chǎn)品,然而JSF是一個(gè)標(biāo)準(zhǔn)。這個(gè)細(xì)節(jié)常常被新的JSF學(xué)習(xí)者忽略,其實(shí)這是顯而易見的,因?yàn)槲覀冇卸鄠€(gè)JSF的實(shí)現(xiàn)。雖然JSF還很不成熟,但是我們已經(jīng)有了2個(gè)優(yōu)秀的JSF實(shí)現(xiàn)可以選擇:Sun的參考實(shí)現(xiàn)和Apache的MyFaces。另一方面,我們只有一個(gè)Struts。

              9.JSF is the standard(JSF是標(biāo)準(zhǔn)) JEE 5.0要提供一個(gè)JSF的實(shí)現(xiàn),這表明JSF不久將會(huì)無處不在。這可能與你無關(guān),但是和工具供應(yīng)商密切相關(guān)?,F(xiàn)在大概有50個(gè)java web應(yīng)用程序框架,工具供應(yīng)商不會(huì)情愿去支持一個(gè)特別的框架,但是他們會(huì)毫不猶豫的去支持一個(gè)標(biāo)準(zhǔn)。而且不止供應(yīng)商,開源項(xiàng)目也會(huì)迅速的聚集在JSF的四周,爭(zhēng)先恐后的去實(shí)現(xiàn)相同的功能。比如說,直到我們?nèi)?shí)現(xiàn)本質(zhì)上和Shale的Tapestry差不多的視圖的時(shí)候,我才知道Facalets。(從長(zhǎng)遠(yuǎn)來看,我相信這種冗余是件好事,會(huì)給我們帶來好處)

              8.POJO Action Methods Struts的行為是和 Struts的API綁定在一起的,但是JSF的行為方法可以在POJPO中實(shí)現(xiàn)。這意味著你不用在表單和模型對(duì)象之間實(shí)現(xiàn)一個(gè)多余的行為層。順便說一下,在JSF里面沒有行為對(duì)象,行為在模型對(duì)象中實(shí)現(xiàn)。但是也請(qǐng)注意一點(diǎn):如果你愿意你也可以生成與JSF獨(dú)立的行為對(duì)象。在Struts里面,你有 Form Bean和Action Bean。Form Bean包含數(shù)據(jù)而Action Bean包含邏輯。OO狂會(huì)想去合并前2者,在Struts你辦不到。但是在JSF中,你可以分開數(shù)據(jù)和邏輯,也可以合并到一個(gè)對(duì)象中,一切由你決定。

              7.Managed Beans(Dependency Injection 依賴注入) 和Spring一樣,JSF也使用了依賴注入(DJ)(或控制反轉(zhuǎn)(IoC))去實(shí)例化和初始化Bean。Struts的確為你生成了Form Bean和Action Bean,但是JSF可以為你生成各種各樣的Managed Bean。

              6.Extensibility(可擴(kuò)展性) 這個(gè)很重要。JSF有6個(gè)對(duì)象實(shí)現(xiàn)了這個(gè)框架的大部分功能,而且你可以很容易的用你自己的實(shí)現(xiàn)代替原有實(shí)現(xiàn)。比如你想加一個(gè)自定義參數(shù)在JSF表達(dá)式語(yǔ)言里面,或是添加一個(gè)自己的視圖控制器以便于區(qū)分組件和HTML。事實(shí)上Shale實(shí)現(xiàn)了上面的功能。如果你還沒有滿足,JSF提供了幾個(gè)地方你可以輕松的控制JSF的生命周期。Shale給你的會(huì)更多。

              5.Event Model(事件模型) JSF的事件模型使你可以對(duì)值改變,動(dòng)作,JSF生命周期階段變換等作出反應(yīng)。在JSF1.1中,那些事件都是在服務(wù)器端處理的,這肯定是一個(gè)缺陷,好在JSF2.0計(jì)劃支持客戶端事件,拭目以待吧。

              4.Value Binding Expressions(值綁定表達(dá)式) 在Struts 中,你負(fù)責(zé)把數(shù)據(jù)從Form傳遞到模型對(duì)象。你實(shí)現(xiàn)的Action的execute方法是把Form作為一個(gè)參數(shù)。然后你再手動(dòng)的把數(shù)據(jù)從Form Bean里面取出放到模型對(duì)象里面。你要為應(yīng)用里面的每個(gè)Form做這些事情,然而在JSF里面,你只需像這樣:#{model.property} 就夠了,其他的交給JSF來處理。

              3.Renderers 你有看過Struts的標(biāo)簽的源代碼嗎?它直接生成HTML。JSF組件標(biāo)簽什么都不生成,它和服務(wù)器上的一對(duì)component-renderer對(duì)應(yīng)。Component維護(hù)組件狀態(tài),rendered負(fù)責(zé)獲得視圖。重點(diǎn)是renderers是可插拔的,即你可以根據(jù)自己需求實(shí)現(xiàn)然后替代掉默認(rèn)實(shí)現(xiàn)。比如說我在NFJS上面的Felix談話中舉例說明了怎么去實(shí)現(xiàn)一個(gè)自定義的label renderer。你只需要配置你的renderer,JSF就會(huì)自動(dòng)在你的應(yīng)用程序里面使用他。

              2.Render Kits 在幾年前我曾經(jīng)有份Struts咨詢工作,我們必須同時(shí)支持瀏覽器和無線設(shè)備,非常痛苦。但是用JSF來完成那個(gè)任務(wù)非常容易,因?yàn)槟憧梢陨赡阕约旱膔ender kit-為一種特定顯示技術(shù)的renderers的集合-然后配置到JSF里面。

              1.Components(組件) 組件是Struts和JSF之間最大的區(qū)別。就像Swing一樣,JSF提供豐富的底層構(gòu)件去開發(fā)組件然后添加到標(biāo)準(zhǔn)的組件集。那些底層構(gòu)件讓你很容易的生成自己的組件并且和別人共享?,F(xiàn)在我們到處都能看到自定義組件跳出來,比如說Oracle的ADF和MyFaces,兩者都提供了豐富的組件集,就像 javascript日歷,tree等等。當(dāng)然,組件只是一部分。典型的是,組件都和一個(gè)獨(dú)立的renderer對(duì)應(yīng),這給我們帶來了真正的好處(看第3 條)。但是和JSF中的很多東西一樣,你不一定要墨守成規(guī)。只要你愿意,你可以實(shí)現(xiàn)render自己的組件,雖然這樣你會(huì)失去給組件加入別的 renderer的能力。


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 葵青区| 万全县| 外汇| 定远县| 西宁市| 南宫市| 永兴县| 正蓝旗| 霸州市| 句容市| 利津县| 宁阳县| 新泰市| 包头市| 望都县| 伊金霍洛旗| 江阴市| 阜南县| 施秉县| 丽水市| 忻州市| 华阴市| 松江区| 五原县| 济阳县| 嘉荫县| 礼泉县| 和田县| 大丰市| 凤翔县| 合阳县| 永寿县| 高雄市| 棋牌| 梅河口市| 确山县| 雷山县| 新野县| 榕江县| 寿光市| 富锦市|