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

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

J2EE MVC模式JSF與Struts的異同

2019-11-18 15:42:46
字體:
供稿:網(wǎng)友

  Struts和JSF/Tapestry都屬于表現(xiàn)層框架,這兩種分屬不同性質(zhì)的框架,后者是一種事件驅(qū)動型的組件模型,而Struts只是單純的MVC模式框架,老外總是急吼吼說事件驅(qū)動型就比MVC模式框架好,何以見得,我們下面進(jìn)行具體分析比較一下到底是怎么回事?

  首先事件是指從客戶端頁面(瀏覽器)由用戶操作觸發(fā)的事件,Struts使用Action來接受瀏覽器表單提交的事件,這里使用了Command模式,每個繼續(xù)Action的子類都必須實現(xiàn)一個方法execute。

  在struts中,實際是一個表單Form對應(yīng)一個Action類(或DispatchAction),換一句話說:在Struts中實際是一個表單只能對應(yīng)一個事件,struts這種事件方式稱為application event,application event和component event相比是一種粗粒度的事件。

  struts重要的表單對象ActionForm是一種對象,它代表了一種應(yīng)用,這個對象中至少包含幾個字段,這些字段是jsp頁面表單中的input字段,因為一個表單對應(yīng)一個事件,所以,當(dāng)我們需要將事件粒度細(xì)化到表單中這些字段時,也就是說,一個字段對應(yīng)一個事件時,單純使用Struts就不太可能,當(dāng)然通過結(jié)合javascript也是可以轉(zhuǎn)彎實現(xiàn)的。

  而這種情況使用JSF就可以方便實現(xiàn),

<h:inputText id="userId" value="#{login.userId}">
 ?。糵:valueChangeListener type="logindemo.UserLoginChanged" />
</h:inputText>

  #{login.userId}表示從名為login的JavaBean的getUserId獲得的結(jié)果,這個功能使用struts也可以實現(xiàn),name="login"

  要害是第二行,這里表示假如userId的值改變并且確定提交后,將觸發(fā)調(diào)用類UserLoginChanged的processValueChanged(...)方法。

  JSF可以為組件提供兩種事件:Value Changed和 Action. 前者我們已經(jīng)在上節(jié)見識過用處,后者就相當(dāng)于struts中表單提交Action機(jī)制,它的JSF寫法如下:

<h:commandButton id="login" commandName="login">
 ?。糵:actionListener type=”logindemo.LoginActionListener” />
</h:commandButton>

  從代碼可以看出,這兩種事件是通過Listerner這樣觀察者模式貼在具體組件字段上的,而Struts此類事件是原始的一種表單提交Submit觸發(fā)機(jī)制。假如說前者比較語言化(編程語言習(xí)慣做法類似Swing編程);后者是屬于WEB化,因為它是來自Html表單,假如你起步是從Perl/php開始,反而輕易接受Struts這種風(fēng)格。

  基本配置

  Struts和JSF都是一種框架,JSF必須需要兩種包JSF核心包、JSTL包(標(biāo)簽庫),此外,JSF還將使用到Apache項目的一些commons包,這些Apache包只要部署在你的服務(wù)器中既可。

  JSF包下載地址:http://java.sun.com/j2ee/javaserverfaces/download.html選擇其中Reference Implementation。

  JSTL包下載在http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi

  所以,從JSF的驅(qū)動包組成看,其開源基因也占據(jù)很大的比重,JSF是一個SUN伙伴們工業(yè)標(biāo)準(zhǔn)和開源之間的一個混血兒。



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 上高县| 唐河县| 叶城县| 湟中县| 沁水县| 平乡县| 华亭县| 沅江市| 和顺县| 淄博市| 兰考县| 华宁县| 高阳县| 即墨市| 朝阳县| 盐源县| 区。| 苏尼特左旗| 余姚市| 梨树县| 江永县| 怀宁县| 应用必备| 玛纳斯县| 高青县| 琼海市| 冀州市| 扎鲁特旗| 阜康市| 北流市| 尖扎县| 巴南区| 海丰县| 鄂州市| 淮阳县| 五常市| 保定市| 阳城县| 怀柔区| 正安县| 峨山|