熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

選擇JSF不選Struts的十大理由

2013-11-23 20:11:22  來源: Java開源技術 
        我的一個客戶不知道該選用Struts還是JSF就像你預料的那樣我通常會問中框架之間有什麼區別?當然除了我的這個客戶外很多人都面臨這樣的選擇

  

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

  

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

  Components(組件)

  Render Kits

  Renderers

  Value Binding Expressions(值綁定表達式)

  Event Model(事件模型)

  Extensibility(可擴展性)

  Managed Beans(Dependency Injection 依賴注入)

  POJO Action Methods

  JSF is the standard Javabased web app framework (JSF是java web應用程序的標准框架)

  Theres only one Struts(只有一個Struts)

  

  Theres only one Struts(只有一個Struts)

  Struts是一個開源產品然而JSF是一個標准這個細節常常被新的JSF學習者忽略其實這是顯而易見的因為我們有多個JSF的實現雖然JSF還很不成熟但是我們已經有了個優秀的JSF實現可以選擇Sun的參考實現和Apache的MyFaces另一方面我們只有一個Struts

  

  JSF is the standard(JSF是標准)

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

  

  POJO Action Methods

  Struts的行為是和Struts的API綁定在一起的但是JSF的行為方法可以在POJPO中實現這意味著你不用在表單和模型對象之間實現一個多余的行為層順便說一下在JSF裡面沒有行為對象行為在模型對象中實現但是也請注意一點如果你願意你也可以生成與JSF獨立的行為對象在Struts裡面你有Form Bean和Action BeanForm Bean包含數據而Action Bean包含邏輯OO狂會想去合並前在Struts你辦不到但是在JSF中你可以分開數據和邏輯也可以合並到一個對象中一切由你決定

  

  Managed Beans(Dependency Injection 依賴注入)

  和Spring一樣JSF也使用了依賴注入(DJ)(或控制反轉(IoC))去實例化和初始化BeanStruts的確為你生成了Form Bean和Action Bean但是JSF可以為你生成各種各樣的Managed Bean

  Extensibility(可擴展性)

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

  

  Event Model(事件模型)

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

  

  Value Binding Expressions(值綁定表達式)

  在Struts中你負責把數據從Form傳遞到模型對象你實現的Action的execute方法是把Form作為一個參數然後你再手動的把數據從Form Bean裡面取出放到模型對象裡面你要為應用裡面的每個Form做這些事情然而在JSF裡面你只需像這樣#{modelproperty} 就夠了其他的交給JSF來處理

  

  Renderers

  你有看過Struts的標簽的源代碼嗎?它直接生成HTMLJSF組件標簽什麼都不生成它和服務器上的一對componentrenderer對應Component維護組件狀態rendered負責獲得視圖重點是renderers是可插拔的即你可以根據自己需求實現然後替代掉默認實現比如說我在NFJS上面的Felix談話中舉例說明了怎麼去實現一個自定義的label renderer你只需要配置你的rendererJSF就會自動在你的應用程序裡面使用他

  

  Render Kits

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

  

  Components(組件)

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


From:http://tw.wingwit.com/Article/program/Java/ky/201311/28085.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.