日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Seam與JSF的加減法

JSF的加減法

JSF 本身是很多問(wèn)題的。當(dāng)然,JSF不是一項(xiàng)技術(shù),而是標(biāo)準(zhǔn)??纯?javax.faces.* 包里的內(nèi)容,不是抽象類就是接口,是沒(méi)有實(shí)現(xiàn)的。 JSF 出來(lái)的時(shí)候目的也不是面向應(yīng)用開(kāi)發(fā)者的,而是面向組件供應(yīng)商的,從這點(diǎn)意義上來(lái)說(shuō),JSF是成功的。Sun提供了一個(gè)reference implementation, 但是那更像是教組件供應(yīng)商如何做組件的一個(gè)demo,而非真正意義上的給應(yīng)用開(kāi)發(fā)人員用的成型的組件。

標(biāo)準(zhǔn)因?yàn)橐诤细鞣叫枨螅詢?nèi)容只能是各方能力的交集。至于標(biāo)準(zhǔn)之外的東西,則需要各方去發(fā)揮。

JSF標(biāo)準(zhǔn)因?yàn)槭窍扔诔尚偷膽?yīng)用出來(lái)的(不同于EJB3的借鑒hibernate和spring,JSF299的借鑒seam),難免會(huì)有預(yù)見(jiàn)不足的地方。在某些地方可能作了過(guò)分的限制,而另外某些地方則完全沒(méi)有規(guī)定放得太開(kāi)導(dǎo)致標(biāo)準(zhǔn)實(shí)現(xiàn)商完全忽略了它們。

但是 JSF 的初衷是不錯(cuò)的,而且標(biāo)準(zhǔn)本身也足夠的可擴(kuò)展。 所以現(xiàn)在才會(huì)誕生如此多的基于 JSF 的框架。 這些框架在不同程度上修復(fù)了 JSF 初始制定時(shí)的不足。

Ajax4JSF, Facelets, Seam 是這其中三個(gè)獨(dú)立的方向。

1. A4J:   用網(wǎng)絡(luò)檢測(cè)工具可以清晰地看到,每次在JSF postback 的時(shí)候,雖然可能只有部分頁(yè)面需要刷新,但整個(gè)頁(yè)面都會(huì)被從服務(wù)器送往瀏覽器。這是非常浪費(fèi)的。 JSF的event-driven模型實(shí)際上非常適合部分頁(yè)面刷新(試想如果沒(méi)有事件模型,每晃一下鼠標(biāo)顯示器就把整屏幕重畫(huà),現(xiàn)在也就沒(méi)有 windows了),但是因?yàn)閍jax出來(lái)的時(shí)候JSF標(biāo)準(zhǔn)已經(jīng)final了,就沒(méi)有把Ajax考慮進(jìn)去。對(duì)于事件模型來(lái)說(shuō),把整屏幕重畫(huà)改為部分組件重畫(huà)是件相對(duì)容易的事情,這也就是 Ajax4JSF 這個(gè)項(xiàng)目的目的。是否開(kāi)啟AJAX,可以不需要javascript,只是更改頁(yè)面中的某個(gè)開(kāi)關(guān)(tag)就行了。

2. Facelets:   JSF是建立在JSP上的,但這是完全沒(méi)有必要的。JSP不是模板語(yǔ)言,它只是簡(jiǎn)單得把嵌入在html里的java語(yǔ)言原樣放入Java的源文件里,實(shí)際上是混合的html和java。這種模型和JSF的事件模型沒(méi)有任何互補(bǔ)的關(guān)系。相反,它給JSF加入了不必要的限制。Facelets的目的在于取代 jsp在JSF里的地位。它是真正的模板語(yǔ)言,el表達(dá)式可以嵌入在頁(yè)面的任何位置,比如寫成:

Hi,I'm Jordan, I think the winner of this cup is #{winner.name}, is that right?

Facelets不需要編譯,頁(yè)面是hot-deploy的,性能比jsp快。另外,facelets本身提供了加參模板的功能,定制新的組件可以完全不寫java,只把頁(yè)面里的需要提成組件的內(nèi)容扔進(jìn)分離的頁(yè)面,并且在taglib.xml里面加入tag指向分離的頁(yè)面,并指定參數(shù)名字就可以了。 JSF最為人詬病的組件缺乏的問(wèn)題,在facelets這里得到了緩解,實(shí)際上是不怎么需要第三方組件就可以快速寫出舒服的代碼來(lái)。Facelets還有其它的功能,比如debug頁(yè)面顯示facelets頁(yè)面出錯(cuò)的行號(hào),比如無(wú)限嵌套的模板,等等。

3. Seam:  Seam 其實(shí)本身是無(wú)關(guān)JSF的,但是因?yàn)樗鼜囊婚_(kāi)始就建在JSF上面,所以也不得不對(duì)JSF的一些問(wèn)題進(jìn)行修復(fù)。

Seam的工作需要分開(kāi)來(lái)細(xì)說(shuō):
◆page行為
◆Context-filter
◆RESTful(重建頁(yè)面參數(shù))
◆異常處理
◆跨越重定向的狀態(tài)

現(xiàn)在我們有了JSF的加減法:

JSF - (全頁(yè)面刷新) + Ajax4JSF  -  Jsp   +  Facelets  +  全局Page行為  +  Context-filter   +  Restful參數(shù)綁定  +  可定制異常 + 跨越重定向的狀態(tài)    =   “ -_-  !一大碗炸醬面”

就好像一件黃金圣衣,經(jīng)過(guò)無(wú)數(shù)次修補(bǔ),雖然還能再用,但是實(shí)在不如重鑄了。

JSF 需要一套整合的模型,使這些各個(gè)分散的部分重新以一種整體的局面展現(xiàn)出來(lái)。它需要把多余的東西拋棄掉,把新的內(nèi)容以更集成的方式融在一起,因?yàn)楣馐鞘煜み@些不同分散的部分,理解它們之間的關(guān)系,知道哪里會(huì)有BUG,哪里則可以避免這些BUG,并且在運(yùn)用的時(shí)候總是用對(duì)該用的東西,這已經(jīng)使人非常頭大了。 JSF作為標(biāo)準(zhǔn)來(lái)說(shuō)是成功的,在這一標(biāo)準(zhǔn)下有了如此多的可以插拔的第三方軟件。但是該是時(shí)候?qū)@些零散的東西統(tǒng)一了。就好像ubuntu在統(tǒng)一的指導(dǎo)思想下集合了盡可能多的零散的開(kāi)源軟件,使它們可以被一種簡(jiǎn)單并且相似的方式獲取,使我不需要像在Gentoo里安裝任何一個(gè)東西都要搜索搜索再搜索,了解它的來(lái)源,了解它的BUG,了解我的硬件是否支持。作為用戶,我不想學(xué)習(xí),我想有明白的人替我作決定,那是***的,特別是當(dāng)這些決定make sense的時(shí)候。

現(xiàn)在的Seam正是朝這個(gè)方向走的。能走這樣的路,得有兩個(gè)條件,一是有眾多零散的可用的東西,但是它們?nèi)狈y(tǒng)一的形式(但它們得有能夠統(tǒng)一的背景,比如 ubuntu下是posix標(biāo)準(zhǔn),Seam下是JSF標(biāo)準(zhǔn));二是有對(duì)該領(lǐng)域非常熟悉的人來(lái)做這樣的事情。上面提到的Seam對(duì)JSF的改進(jìn)其實(shí)只是 Seam框架下非常小的一部分,是Seam在向這個(gè)目標(biāo)前進(jìn)的必須的一個(gè)步驟,是在Seam內(nèi)核基礎(chǔ)上水到渠成的東西,而遠(yuǎn)非Seam的全部。正如 Seam的名字所示:縫合;正如ubuntu的名字所示:分享與同在。它們的制定者在決定之初即是向著這一目標(biāo)前進(jìn)的。

已經(jīng)early draft review的JSR 299, 即是借鑒了Seam(以及其它比如Guice)的一個(gè)標(biāo)準(zhǔn),試圖把這一方向推得更遠(yuǎn)。

至于對(duì)于縫合所需要的本事,Seam的conversation模型,CoC理念,元注解配置+xml補(bǔ)充方式,動(dòng)態(tài)雙向注入模型(不同于spring的靜態(tài)單向注入),擴(kuò)展了的EL等,是其基礎(chǔ)。內(nèi)部事件和監(jiān)聽(tīng)模型,和drools的安全集成模型,和hibernate-seach, hibernate-validation, seam-remoting, jbpm,groovy,itext的集成,是其在基礎(chǔ)之上的應(yīng)用。這些則需要另外的文章來(lái)寫了。

不說(shuō)Seam誕生的大環(huán)境和Seam產(chǎn)生的語(yǔ)言基礎(chǔ),只是說(shuō)Seam本身的功能,大概也可以,不過(guò)我認(rèn)為非常多的外在功能都只是某些環(huán)境外在因素和基本內(nèi)在因素所決定了的。大環(huán)境和內(nèi)在可能定了之后,細(xì)節(jié)的東西只是做就可以了。所以沒(méi)有辦法,還是得繞開(kāi)Seam本身說(shuō)些題外話。

JSF的加減法說(shuō)了一下 Seam誕生的環(huán)境,這是外在機(jī)會(huì),是融合各種技術(shù)的可能性,是廣的緯度。 這篇文章說(shuō)說(shuō)java上的可能性,是何讓Seam具有了融合的本事,是內(nèi)在能力,從深的緯度上說(shuō)吧。

【編輯推薦】

  1. 了解JSF整體架構(gòu)
  2. 詳細(xì)介紹JSF和MVC
  3. JSF通過(guò)URL來(lái)傳遞參數(shù)
  4. Facelets使用JSF組件
  5. BackingBean和JSF配置文件

文章標(biāo)題:Seam與JSF的加減法
鏈接地址:http://www.5511xx.com/article/dhhjcso.html