QFaces - JSF的Ajax增強框架,使用Ajax可以這樣簡單.

          QFaces 增強框架

          Java Server Faces (JSF)  Ajax增強框架 – QFaces

           

                 隨筆:

           

                 JSF 簡直就是一個非常神奇,又魅力無窮的框架”。

                

                 這是我學(xué)習(xí)這么久之后自己對JSF的一個總結(jié)。有一段時間沒有寫隨筆了,不過最近工作一停下來就又有了時間來發(fā)點牢騷,看望一下Blog中的朋友,呵呵! 順便搞點東西出來充實自己。

              有一些人感覺JSF上手難,使用不夠自由,這只不過是對她還理解得不夠透徹而已,當(dāng)你理解得更深的時候,特別是當(dāng)你能夠完全自由的定制組件的時候,你一定會愛上她的,至少我現(xiàn)在是這樣,呵呵!

           

                 合理的使用組件,使你的項目效率提高10倍!這是某些使用JSF的強人說的,但是一點都不神奇!我并不是說一定會提高10倍,因為我也沒有真正去計算過,但是我相信是真的,呵呵!你信也行不信也可,說服他人摒棄自己的觀點并且同意一個不可思議的新觀點并不容易!所以我也不想這么做。

           

                 記得

           

                 前不久跟一位朋友說過“某些時候內(nèi)存分頁會更實用”的時候,費了九牛二虎的唇舌(這里好像有點用詞搭配不當(dāng)!但是,將就吧)才將朋友勉強說服,然后朋友第二天使用了10萬條數(shù)據(jù)來考驗我的觀點!最終我失敗了,架構(gòu)上采用了朋友的分頁方式繼續(xù)進行。

           

                 這里不討論對與錯。實際上朋友架構(gòu)上的設(shè)計做得很好,至少這點上統(tǒng)一了分頁形式:“按需索取”數(shù)據(jù)的方式。事實上,后來在項目的進行中也體現(xiàn)了統(tǒng)一規(guī)范對整個系統(tǒng)的好處。但始終我也沒有認為自己的觀點是錯的。哈哈!

           

                 所以,有時候我們做不到摒棄自己的觀點,但是我們可以保留自己的觀點,然后學(xué)習(xí)他人的一些新觀點。

           

                 好了,繼續(xù)JSF的話題,

           

                 為什么寫這個增強框架

           

                 寫這個增強框架, 一是為了鍛煉提高自己的能力, 二是為了總結(jié)一下自已各方面的一些知識!另一個我也希望JSF這么好的一個框架, 會有更多人喜歡! 盡管他入門并不容易,而且目前資料也還是太少! 不過作為一個設(shè)計如此優(yōu)雅的框架,我相信會有很多人喜歡她的! 還有一個就是最近又有點無所事事,一停下手頭的工作就想弄點什么東西出來,這使自己一直對編程保留激情,保持自信。最近又與朋友聊了很多這方面的東西,網(wǎng)絡(luò)真是個好東西,不用見面有時候就可以聊得很投機。沒事的時候與朋友聊聊天,談?wù)劸幊谭矫娴臇|西,也不會使自己整天坐在電腦前時感覺郁悶!(我寫文章總是喜歡偏題),想到什么就寫什么,這樣很舒服!

           

                 這個東東(QFaces)有什么好處

           

                 它可以幫助你實現(xiàn)很美好的用戶體驗,并完全簡化你的開發(fā)過程。比如validator, inputHelp這兩個組件。

                 但這不僅僅是一個組件庫,他還是一個增強的Ajax框架,后面我會寫有關(guān)如何使用這個東東實現(xiàn)自己的Ajax組件的教程,你會發(fā)現(xiàn)做一個帶有Ajax功能的組件會是多么容易。你會發(fā)現(xiàn) Java Server Faces完全參考手冊”也沒有的一些東西,這是一本好書,但它也不可能面面俱到,否則就不會只是793頁了。

          所以他是一本參考書,真正的東西還是需要自己去發(fā)掘。

           

                 為什么叫“增強”

           

                 我一直在想辦法使它不需要修改你的代碼邏輯,甚至html代碼,就可以非常簡單的使用這個組件庫,只要簡單的將它掛上去就可以將你的其它組件變得很神奇。所以使用方法也會非常簡單,如:

                 <q:validator for=”sid” />

          只要加上這么一句,就可以將你的其它inputText組件突然之間變成Ajax方式的,呵呵!

           

                 關(guān)于性能

           

                 框架已經(jīng)對Ajax的性能作了最優(yōu)的處理,基本上與原生的Ajax性能是一致的,因為你不需要在其中跑完JSF生命周期的6個階段,(只需要1個階段,用于POST方式請求數(shù)據(jù)的),并且當(dāng)你使用Get方式請求數(shù)據(jù)時,這與你使用servlet直接處理Ajax請求無異。只需要遵守一點簡單得不能再簡單的小小的約定就可以了。

           

                 目前WEB框架多得讓人眼花,各個都有優(yōu)缺點,歡迎朋友互相討論,學(xué)習(xí)研究,批評指正, 共同交流學(xué)習(xí)。


          ==================================================================


          QFaces下載,基于JSF的ajax增強框架(附j(luò)avadoc,demo,完整文檔)


          一、安裝說明

           

           

          1. 組件安裝:

          將組件包qfaces.jar放到項目的類路徑下(一般為:/WEB-INF/lib/),然后打開項目的web.xml配置文件,增加以下的servlet即可,請注意拼寫正確。

           

          <servlet>

                  <servlet-name>QFaces</servlet-name>

                  <servlet-class>name.huliqing.qfaces.FacesServlet</servlet-class>

              </servlet>

              <servlet-mapping>

                  <servlet-name>QFaces</servlet-name>

                  <url-pattern>*.qfaces</url-pattern>

              </servlet-mapping>

           

          2.組件使用:

                 jsp頁面頭部增加以下的標(biāo)簽引用即可使用控件。

           

          <%@ taglib prefix="q" uri="http://huliqing.name/qfaces" %>

           

           

          二、組件標(biāo)簽

           

          1. validator標(biāo)簽

                

                 該組件可將標(biāo)準(zhǔn)JSF組件的默認驗證方式轉(zhuǎn)化為Ajax驗證方式(包括Converter),通過組件的for屬性所指定的目標(biāo)組件將會被轉(zhuǎn)化為Ajax驗證方式,從此你再也不需要為前端表單頁面寫javascript驗證而發(fā)愁。

                 只在前端用javascript驗證并不安全,在后臺驗證又不能提高用戶體驗, 前后臺一起驗證,?!代碼太多,又麻煩!并且維護及更改也不容易,但是這個組件可以幫助你輕松完成這一切:    (1) 使用這個組件可以幫助你將兩者統(tǒng)一起來,前后臺驗證,完全兼容原生JSF驗證。

                 (2) 完全不用破壞你的原有代碼邏輯,也就是說,你根本不用修改你的原有代碼。

           

                 (3) 你完全可以不知道javascriptajax是什么東東。(有興趣的話,去了解一下也很好)

           

          屬性

          類型

          說明

          必需

          for

          String

          指定到需要驗證的關(guān)聯(lián)組件

          type

          String

          給目標(biāo)組件指定一個簡單的類型,:

          123” 表示只能填數(shù)字類型。

          0.0” 表示只能填小數(shù)類型。

          “abc” 表示只能填小寫字母。

          “ABC” 表示只能填大寫字母。

          “Abc” 表示只能填字母(不限大小寫)

          用這樣表示數(shù)據(jù)類型,看起來似乎有點怪異,但卻很形象生動. J

           

          minLength

          Integer

          表示目標(biāo)組件必須填的最少字符長度。

          maxLength

          Integer

          表示目標(biāo)組件可填的最大字符長度。

          required  

          Boolean

          表示目標(biāo)組件是否是必填的

          regex

          String

          正則表達式,可用于輔助對目標(biāo)控件進行高級驗證,這里你必須填的是一個正則表達式的字符串,如:

          regex="[a-z]{1,6}"

          匹配1-6個小寫字母

          ajax

          Boolean

          組件默認會使用ajax驗證,如果你不需要進行ajax方式驗證,可以使用該屬性關(guān)閉ajax調(diào)用,如:ajax=”false”

           





















          用法示例(1):

                 簡單的將目標(biāo)控件sid的驗證方式轉(zhuǎn)化為Ajax驗證

          <h:inputText id=”sid” value="#{UIValidatorBean.domain1.sid1}" required="true" />

          <q:validator for=”sid” />

           

          用法示例(2):

                 限制目標(biāo)組件sid的值只能填字母,不區(qū)分大小寫,并且長度必須在2-10個字符之間。

          <h:inputText id=”sid” value="#{UIValidatorBean.domain1.sid1}" />

          <q:validator for=”sid” type=”Abc” minLength=”2” maxLength=”10” />

           

          用法示例(3):

                 使用正則表達式進行驗證,限制目標(biāo)組件sid的值只能由1-6個字母組件,使用該方式你需要了解正則表達式的使用方法。

          <h:inputText id=”sid” value="#{UIValidatorBean.domain1.sid1}" />

          <q:validator for=”sid” regex=”[a-zA-Z]{1,6}” />

           

          2. InputHelp標(biāo)簽

           

          該組件可以輔助InputText等的錄入工作,提供錄入幫助信息!

           QFaces-demo


          屬性

          類型

          說明

          必需

          for

          String

          指定到需要提供需入幫助的組件ID

          listener

          Method

          方法表達式,提供錄入幫助的方法,方法簽名必須是這樣:

          List<String> listener(String[]) 

          或者是這樣:

          List<List<String>> listener(String[])

          該方法通過Ajax方式給頁面的目標(biāo)輸入組件提供選項列表,以供選擇.

           

          header

          String

          給組件提供標(biāo)題頭,各個標(biāo)題頭以”,”號分隔,:

          header=”帳號,用戶名,電話

          footer

          String

          給組件提供一些額外信息,或幫助描述,:

          footer=”Welcome to use QFaces!”

          ref

          String

          組件默認提供一個引用值給listener所綁定的方法參數(shù),可以從listener的方法參數(shù)中獲得這個值,: args[0].

          當(dāng)你需要引用頁面中的多個組件的值時,你可以使用ref這個參數(shù),: ref=”id1,id2,id3”

          這樣可以從后臺的args參數(shù)中依次獲得頁面組件id1,id2,id3的值,像這樣:

          String id1Value = args[0];

          String id2Value = args[1];

          String id3Value = args[2];

          styleClass

          String

          組件樣式

           























          用法示例(1):

           

                 for指定到目標(biāo)組件的id, 后臺提供偵聽方法, 返回選項列表, 即可為目標(biāo)組件提供錄入支持.

           

          <q:inputHelp for="myInput1" listener="#{UIInputHelpBean.listenerRefOneValue}">

          <h:inputText id="myInput1" value="" />

          </q:inputHelp>

           

          后臺的listenerRefOneValue方法可以像這樣,args[0]中獲得當(dāng)前目標(biāo)組件的頁面值,并返回選項列表.

           

          public List<String> listenerRefOneValue(String[] args) {

              List<String> result = new ArrayList<String>(5);

              String targetValue = args[0];   // 取回目標(biāo)組件的值

              for (int i = 0; i < 5; i++) {

                  result.add("row" + i + targetValue);

              }

              return result;

          }

           

          用法示例(2):

           

              高級一點的用法, 組件引用到了頁面中的多個組件的值,id1,id2,id3, 并且顯示了表格標(biāo)題,頁頁腳信息.

           

          <h:inputText id="id1" value="value1" />

          <h:inputText id="id2" value="value2" />

          <h:inputText id="id3" value="value3" />

          <q:inputHelp for="myInput2" ref="id1,id2,id3"

          listener="#{UIInputHelpBean.listenerRefManyValue}"

          header="帳號,用戶名,電話" 

          footer="QQ:31703299 huliqing@live.com" >

          <h:inputText id="myInput2" value="" />

          </q:inputHelp>

           

          后臺listener所綁定的方法listenerRefManyValue可以像下面這樣, 返回列表以多列形式,這樣可以提供更多的信息給操作用戶!具體效果請請參考示例圖片.

           

          public List<List<String>> listenerRefManyValue(String[] args) {

              List<List<String>> result = new ArrayList<List<String>>();

              String refValue1 = args[0]; // 依次取得所引用的組件的值

              String refValue2 = args[1];

              String refValue3 = args[2];

              for (int i = 0; i < 5; i++) {

                  List<String> aa = new ArrayList<String>(3);

                  aa.add("row" + i + refValue1);

                  aa.add("row" + i + refValue2);

                  aa.add("row" + i + refValue3);

                  result.add(aa);

              }

              return result;

          }

           

          ===================================================================


          作者:胡李青(Huliqing)

          QQ31703299

          Emailhuliqing@live.com

          Bloghttp://www.aygfsteel.com/huliqing/

          HomePagehttp://www.huliqing.name



          - huliqing@huliqing.name
          - http://www.huliqing.name

          posted on 2008-11-14 18:33 huliqing 閱讀(2272) 評論(5)  編輯  收藏 所屬分類: JSF

          評論

          # re: QFaces1.0 - JSF的Ajax增強框架,使用Ajax可以這樣簡單. 2008-11-14 19:42 Libo

          不錯.繼續(xù)努力,加入更多的功能  回復(fù)  更多評論   

          # re: QFaces1.0 - JSF的Ajax增強框架,使用Ajax可以這樣簡單. 2008-11-15 23:19 海中沙

          挺牛的,很不錯!希望能不斷地出新的控件,成為一個系列。  回復(fù)  更多評論   

          # re: QFaces1.0 - JSF的Ajax增強框架,使用Ajax可以這樣簡單. 2008-11-21 17:45 JFire

          我對"使用這個組件可以幫助你將兩者統(tǒng)一起來,前后臺驗證,完全兼容原生JSF驗證"這句話不太理解。如果使用Javascript即使請求通過客戶端驗證,但由于客戶端傳來的數(shù)據(jù)是不能相信的,所以用戶Submit之后,服務(wù)器端仍然要進行一次驗證。可否解釋一下JSF是如何做到一起驗證的。  回復(fù)  更多評論   

          # re: QFaces1.0 - JSF的Ajax增強框架,使用Ajax可以這樣簡單. 2008-11-21 19:47 huliqing

          @JFire
          呵呵,你好.對于Validator這個組件是如何驗證的,我舉個例子吧,如下代碼:
          <h:inputText id=”sid” value="#{UIValidatorBean.domain1.sid1}" required="true" />
          <q:validator for=”sid” />

          sid這個inputText組件本身有自己的JSF驗證required=true, 也就是說,他會在后臺驗證組件是否為空, 這是安全的. 而<q:validator for="sid" /> 這個組件會把inputText組件的驗證信息用ajax帶到前臺來,但并不改變后臺原的驗證方式.

          也就是說當(dāng)你在inputText組件中onblur之后, validator這個組件會通過ajax方式去后臺對sid這個inputText組件進行驗證一次后把驗證信息一并帶回來到前臺,所以你可以看到當(dāng)你submit之后驗證信息與ajax帶回來的驗證信息是一樣的.即使你使用自定義的validator

          另外,我已經(jīng)更新了1.1版. 你可以使用QFaces1.1版試試, 新版中修復(fù)了1.0版中validator組件中的一個bug.并增加了一個新組件.  回復(fù)  更多評論   

          # re: QFaces1.0 - JSF的Ajax增強框架,使用Ajax可以這樣簡單. 2008-11-23 08:14 JFire

          @huliqing
          明白了,謝謝!  回復(fù)  更多評論   

          導(dǎo)航

          統(tǒng)計

          公告

          文章原創(chuàng),歡迎轉(zhuǎn)載
          ——轉(zhuǎn)載請注明出處及原文鏈接

          隨筆分類(60)

          隨筆檔案(33)

          最新評論

          評論排行榜

          主站蜘蛛池模板: 巴彦淖尔市| 广南县| 泰州市| 上思县| 汝州市| 鄂托克旗| 普兰店市| 图木舒克市| 岳阳市| 东城区| 巴彦淖尔市| 孟州市| 犍为县| 黔江区| 宾阳县| 马山县| 丹凤县| 姚安县| 广安市| 永新县| 莫力| 西宁市| 台山市| 乐平市| 泾川县| 邵阳市| 财经| 淮阳县| 平顺县| 沙洋县| 长武县| 固阳县| 仁化县| 忻城县| 韩城市| 剑川县| 岳池县| 平塘县| 荣昌县| 鹿邑县| 赣榆县|