成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JSF和AJAX企業(yè)級開發(fā)之路(二)

開發(fā) 后端
本文介紹JSF和AJAX企業(yè)級開發(fā)之路,以及為什么從設計的角度就要將JSF和AJAX整合在一起。

現(xiàn)在,更高級別的JSF和AJAX整合方式到來了。確切的說,這種更加容易使用的解決方案就是在使用JSF基礎上再加上AJAX擴展。我上面已經(jīng)提到了,現(xiàn)在有很多的解決方案了,今天我要談論的是其中之一的Project Dynamic Faces。當你在使用這些解決方案時,通常是不需要去了解任何JavaScript知識的,因為它已經(jīng)為你封裝好JavaScript的編程實現(xiàn),你只需要正常使用JSF的API去編程,就能達到AJAX的效果。當然,你如果需要的話,Dynamic Faces也是允許你去手工編寫JavaScript的,(通過自己編寫的JavaScript)你可以實現(xiàn)更強大復雜的操作。據(jù)我所之Dynamic Faces是目前為止唯一一個可以正確處理JSF上下文敏感(context sensitive)的AJAX交互組件,原因是它充分利用了JSF1.2的優(yōu)勢(注:雖然專家組們在討論JSF2.0規(guī)范,但現(xiàn)在實際使用的JSF最新版本是1.2)。現(xiàn)在我們來看一個demo,假設說你有一個數(shù)據(jù)列表,當你隨便碰到某個單元格時(注:類似于操作Excel.當我們在使用Excel的時候,光標所移動到的任何單元則都是可以隨便操作,并保存的),你想通過AJAX去處理你所指定的那個單元格時,所有的單元格的在頁面渲染完后狀態(tài)都是可隨時存儲的,便于隨時修改,此時顯示在頁面的data table(數(shù)據(jù)表格)就是dataset所持有的數(shù)據(jù)呈現(xiàn)給外部的一個窗口;當你在修改完data table的某行記錄或某行記錄中的某列后,想postback一下(注:postback指的是用戶返回到以前訪問過的一個頁面,與頁面對應的視圖已經(jīng)存在,所以只需恢復它。在這種情況下,JSF 使用現(xiàn)有視圖的狀態(tài)信息重新構(gòu)造它的狀態(tài)。)這時你需要將data table設置成自身,從而可以感知到改動的數(shù)據(jù).JSF1.2已經(jīng)添加了一些新特性來支持這樣的應用場合.這還得多虧我們的專家組成員Jacob Hookom,同時他也是Facelets的作者.(注:Facelets是用來建立JSF應用程序時的一個可供選擇的表現(xiàn)層技術)
  
我之所以為Dynamic Faces亮起紅燈(表示警告),是因為JSF1.2有這個特性,它才能實現(xiàn)這個功能,而且還不是很成熟。雖然它現(xiàn)在當已經(jīng)加入到Sun Web Developer Pack中去了,不過仍然處于0.1版本,與其它你可能聽說過的AJAX解決方案相比,缺乏大量的測試。
  
下一級別的的JSF和AJAX整合方案就是直接使用帶AJAX的JSF組件。用這類組件,與使用普通的JSF組件沒有什么兩樣,實際上它們已經(jīng)將AJAX所做的事都全部為你封裝好了。這些組件也許會通過phase listener,filter或者其它什么配置來處理AJAX請求,但不需要你親自去處理。現(xiàn)在已經(jīng)有一些不錯的組件可以使用了,而且相當一部分還支持JSF1.1。這些組件中,有些是開源的,有些要付費的,總之這是一個相當大的市場,你可以登錄www.jsfcentral.com,這是由另一名專家組成員Kito Mann運作的,里面有很多非常優(yōu)秀的組件,并且你還可以從中了解目前JSF組件的市場行情。
 
退一步說,如果在眾多JSF組件中,仍然沒有讓你感到滿意的話,你就得親自寫代碼了,要不然用DynaFacesr擴展也是可以的。
  
好了,到這里,當我在考慮JSF整合AJAX這部分的時候,一個大難題浮現(xiàn)在我腦中:是應該支持各種途徑去使用AJAX(比如說允許自己編寫客戶端代碼)呢,還是像通常的web應用程序那樣,只采用UI標簽方式呢?我的觀點是,不支持,沒有必要。關于這個點會在小組討論中談到。如果采用Dojo方式的話,你的大量ViewLogic(頁面邏輯)綁定在客戶端上,這樣做也許只是將服務器變得負擔輕一些;而使用GWT的話,你得將Java編譯成JavaScript代碼,但此時的JavaScript仍然運行在客戶端,然后使用一個類似于RMI的機制通過服務器端來來回回不停的調(diào)用。但以上這些只是考慮了客戶端這個方面!另一方面,你仍然可以使用基于服務端開發(fā)工具,去開發(fā)你的組件,然后markup(標記)在服務端上,這樣就可以通過服務端呈現(xiàn)給客戶端,這一類的解決方案的思想就是將UI組件的狀態(tài)保存在服務端.我也覺得無論從成熟度,相應工具的支持程度還是可維護性上來說,這樣做都有很大的優(yōu)勢.按照我的話來說,將大量的UI組件邏輯保存在服務器上,你會發(fā)現(xiàn)更加易去維護.
 

因此,對于上述問題的一種解決辦法是,把JSF當作web應用程序開發(fā)的基礎,并且你只需要在此基礎上略施小計就可以得到AJAX支持.JSF的AJAX擴展就是這么實現(xiàn)的,我現(xiàn)在將一些熟悉的擴展列出來:Dynamic Faces,ICEfaces,AJAX for JSF(現(xiàn)在和JBoss搭上了伙,成為了RichFaces),BackBase還JackBe..總之,在www.jsfmatrix.net站點可以看到這些解決方案之間的比較.另一個不錯的解決辦法來自于JCP,我們會將現(xiàn)在上面列出的那些擴展中先進的思想提交給JSF專家組,并且我們正準做出更多的努力,但現(xiàn)在無法透露太多。(看來JCP的專家組們還是沒有改變辦事過于拖拉的毛病,因此估計官方的JSF和AJAX方案一時半會是出不來了。)
 

那么為什么從設計的角度就要將JSF和AJAX整合在一起呢?因為JSF天生有著Swing的特性,如果你喜歡采用基于組件的面向?qū)ο蠓绞竭M行編程,你會發(fā)現(xiàn)JSF的設計就是為AJAX而準備的.一些JSF的特性使得AJAX變得更加友好并進一步擴展了JSF UI組件模型;一個建立在servlet之上,定義良好的請求處理生存周期(request processing life cycle)管理著WebRequest各種狀態(tài)(phase)下不同的生存周期,比起單純的request, response要豐富的多,甚至我感覺這一點在脫離JSF仍然十分有用.那就是我們打算讓JSF2.0應用程序以更加偏重于client-centric方式,來貫穿整個JSF生存周期,甚至到時候要不要JSF組件都說不定了,但驗證和類型轉(zhuǎn)換等這類東西還是需要的.
  
另一個特性就是靈活和可擴展的組件呈現(xiàn)模型(Rendering Model).Rendering的概念源于組件,你可以用render kits(套件)去豐富基于JavaScript的應用程序,與HTML4.01相比,它的內(nèi)容更加豐富。各種各樣的render kits為你隱藏了復雜的底層細節(jié),幫助你實現(xiàn)網(wǎng)站的多種版本。這里還有一個關于封裝的概念:JavaScript的封裝不應該交給頁面的編寫人員,應該交給組件開發(fā)人員,最終所有的JSF組件統(tǒng)一管理在一起,更加方便透明的保持客戶端與服務器之間的同步。

現(xiàn)在我們來看一些典型的AJAX問題與解答:

1.跨瀏覽器問題,通過封裝好的JavaScript框架已經(jīng)很可做到這一點了

2.本地化和國際化問題,用JSF就可以搞定了,AJAX根本不需要參與

3.Shell remoting的機制就是專門用來管理腳本,它用一種安全的方式為你的組件提供存放在class path外面的JavaScript腳本.

4.如果你覺得你寫了太多的XMLHttpRequest來來回回與服務器進行交互的話,你可以使用Dynamic Faces的批處理事件(或找一個具備批處理事件的類似替換物),一次性將所有的事件發(fā)送完成.

5.使用XML作為(AJAX與服務器交互后的返回的)傳輸數(shù)據(jù)的話,要求對于某些HTML元素做一些額外的優(yōu)化工作.比如說,  是HTML的一個實體,但它在XML中卻什么都不是.當XMLHttpRequest的responseXML包含 的話,Mozilla瀏覽器將無法正常解析XML,它會認為這是一個無效的實體,因此,我不知道你們是不是也覺得這算是Mozilla的一個Bug呢?此時你必要按照某種方式去定義那些東西,并且確保這類問題通過JSF和AJAX的方案來解決.

為現(xiàn)有的或即將立項的JSF應用程序插上AJAX翅膀,我個人覺得對于應用程序來說非常棒.我想我們應該可以做到讓一個已經(jīng)完成的項目AJAX化(AJAXify),并且如果是新的項目的話,保證還能從中得到更多的好處.這一切還得再次得歸功Jacob Hookom天才的理念。我覺得他的Project Dynamic Faces為開發(fā)人員朝著AJAX方向前進了一小步.真的!!!就兩個JSP Tag和兩個JavaScript Function需要你掌握,但就是這小小的一步,你也已經(jīng)可以從中得到很多AJAX特性了.
 
因此,這里有一個基本的概念.將JSF的生存周期通過AJAX暴露給瀏覽器,并且你想通過AJAX來操作整個View或其中的某個部分,從而達到更新一塊單獨的View區(qū)域或某個組件的目的,或者干脆越過AJAX來刷新整個頁面也能實現(xiàn)。有時候,你希望通過使用AJAX可以越過JSF的生存周期,來取得一些控制級別并且你還可以讓服務器(在不刷新頁面的情況下)來改變當前頁面的外觀或行為.通常這對于Swing或其它native UI Tookit開人員來說,很好理解:當前窗體的部分外觀或行為被更新過了,服務器當然只會去對那部分作一下修改,犯不著整個窗體都重新更新一遍。現(xiàn)在將這個觀念帶回到Web開發(fā)中來,頁面的部分內(nèi)容或行為改變了,你重繪(repaint)一下不就得了。

【編輯推薦】

  1. JSF和Spring的集成
  2. JSF中使用自定義Navigation
  3. 簡單介紹JSF應用
  4. JSF動態(tài)生成固定表頭和行標的DataTable
  5. JSF和JSP是一對新的搭檔
責任編輯:佚名 來源: theserverside
相關推薦

2009-06-23 14:55:43

AJAX和JSF

2010-08-04 15:20:15

Flex企業(yè)級開發(fā)

2013-09-02 10:28:09

NoSQL

2011-12-06 14:02:27

企業(yè)級移動開發(fā)

2010-04-07 08:55:00

OSGiSpring

2009-03-30 09:42:28

OSGiJavaJCP

2009-12-14 20:13:57

IBM

2012-05-15 15:21:29

企業(yè)級

2012-06-21 09:51:42

虛擬化

2011-07-05 14:07:36

2024-03-11 09:50:09

模型開發(fā)

2015-08-21 09:06:53

SaaS

2013-11-01 09:25:19

大數(shù)據(jù)HadoopSpark

2013-12-08 21:16:21

BaaS企業(yè)級移動移動信息化

2017-03-21 10:22:09

移動開發(fā)

2013-08-01 00:00:00

開發(fā)企業(yè)級App出路

2009-06-23 10:17:09

Ajax事件和錯誤JSF2

2011-06-30 10:49:27

2009-06-25 14:05:08

Ajax JSF

2009-07-24 13:37:29

SilverlightSilverlight
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本福利视频免费观看 | 中文成人无字幕乱码精品 | 91综合网| 你懂的国产 | 大陆一级毛片免费视频观看 | 日本视频一区二区三区 | 精品一区二区三 | 欧美激情视频一区二区三区免费 | 丁香婷婷在线视频 | 国产精品永久在线观看 | 亚洲精品一区二区三区在线 | 久久精品99国产精品日本 | 国产色网| 亚洲天堂中文字幕 | 成人免费一区二区三区牛牛 | 欧美在线视频一区二区 | 午夜精品久久久久久不卡欧美一级 | 国产精品资源在线 | 成年人网站国产 | 999视频在线播放 | 亚洲视频中文字幕 | 国产精品极品美女在线观看免费 | 视频第一区 | 欧美精品在线观看 | 夜夜精品浪潮av一区二区三区 | 日本久久福利 | 一级做a爰片性色毛片16美国 | 亚洲视频中文字幕 | 日韩av第一页 | 国产原创视频 | 欧美精品一区二区蜜桃 | 日本黄色的视频 | 国产一区二区精品自拍 | 91麻豆精品国产91久久久久久久久 | 久久99视频这里只有精品 | 色视频在线播放 | 超碰成人av| 精品久久一区 | 国产日韩一区二区三免费高清 | 成人国产在线视频 | 欧美午夜精品理论片a级按摩 |