QFaces1.1 -- 二級,三級,四級聯動...,好吧,來個超級聯動! JSF 與 Ajax可以這樣完美的結合

           QFaces1.1新增了一個新的組件,修復了上一版中的Validator的一個錯誤,同時附帶了Demo項目.
          新增的組件我叫它超級聯動: Linkage

          為什么叫超級聯動?

          1.可以無限聯動.
          2.可以不用刷新頁面.
          3.幾乎沒有性能影響.
          4.你不用改變現有的JSF組件.
          5.而且使用還非常簡單 : )

              <q:linkage for="country,province,city,area,street" listener="#{LinkageBean.listener}" />

          for: 指定到頁面其它selectOne組件的id,無個數限制
          listener: 后臺方法綁定,返回相應的選項列表就可以

              實際應用中我們經常會碰到需要級聯選擇的功能,比如:國家,省級,市級等的級聯選擇,這些實現起來并不容易,
          并且要實現較好的兼容性也不是一件輕松的事情,如果要使用者再添加一大堆的javascript也是很麻煩的事情。
          所以我盡量使用非侵入式的方式,將它實現得比較輕松自由,并且讓使用者以最簡單的方式使用,這是我的目標。
          在不改變你的代碼及邏輯的情況下,使用這個組件就可以將你頁面中的所有selectOne組件變成擁有級聯關系的!!
          如果你感覺很神奇,那就去學一學JSF這個框架吧,實際上自定義組件才是JSF的精華, 這絕對是你發揮無限想象力的地方!

          關于下載,安裝,及使用,后面附有鏈接。

          先看一下這個組件的效果圖吧:
                  
                        圖1                                    圖2

          以下是html頁面源碼,只要在第一級別提供選項就可以:
           1 <h:form>
           2     <!-- 國家,省份,城市,城區,街道 -->
           3     <h:selectOneMenu id="country"   value="#{LinkageBean.country}">
           4         <f:selectItem itemValue="" itemLabel="" />
           5         <f:selectItem itemValue="China" itemLabel="中國" />
           6     </h:selectOneMenu>
           7     <h:selectOneMenu id="province" value="#{LinkageBean.province}" />
           8     <h:selectOneMenu id="city" value="#{LinkageBean.city}"/>
           9     <h:selectOneMenu id="area" value="#{LinkageBean.area}"/>
          10     <h:selectOneMenu id="street" value="#{LinkageBean.street}"/>
          11             
          12     <q:linkage for="country,province,city,area,street" listener="#{LinkageBean.listener}" />
          13
          14     <h:commandButton value="Submit" action="#{LinkageBean.action}" />
          15     <h:outputText value="你的選擇:#{LinkageBean.country}-#{LinkageBean.province}-#{LinkageBean.city}-#{LinkageBean.area}-#{LinkageBean.street}" />
          16</h:form>

          這樣可以讓你無限的添加 h:selectOne..., 這樣你可以實現自己的無限級聯。

          下面是后臺bean所綁定的一個偵聽方法,該方法只是返回相應的選項列表而已

           1 public Items listener(Level level) {
           2         if (level.getLevel() == 0) { // 如果觸發的是第一級(國別)的選擇,返回省級列表
           3             Items items = new Items();
           4             if ("China".equals(level.getValue())) {
           5                 Item bj = new Item("bj""北京");
           6                 Item hn = new Item("hn""河南");
           7                 Item gd = new Item("gd""廣東");
           8                 items.add(bj);
           9                 items.add(hn);
          10                 items.add(gd);
          11                 gd.setSelected(true);   // 設置默認值
          12             }
          13             return items;
          14         } else if (level.getLevel() == 1) { // 如果觸發的是第二級(省級)的選擇
          15             Items items = new Items();
          16             if ("gd".equals(level.getValue())) {
          17                 items.add(new Item("gz""廣州"));
          18                 items.add(new Item("sz""深圳"));
          19                 items.add(new Item("st""汕頭"));
          20             }
          21             if ("hn".equals(level.getValue())) {
          22                 items.add(new Item("zz""鄭州"));
          23                 items.add(new Item("ly""洛陽"));
          24                 items.add(new Item("kf""開封"));
          25             }
          26             return items;
          27         } else if (level.getLevel() == 2) { // 如果觸發的是第三級(市級)的選擇
          28             Items items = new Items();
          29             if ("gz".equals(level.getValue())) {
          30                 items.add(new Item("byq""白云區"));
          31                 items.add(new Item("yxq""越秀區"));
          32                 items.add(new Item("thq""天河區"));
          33             }
          34             return items;
          35         } else if (level.getLevel() == 3) { // 如果觸發的是第四級(區級)的選擇
          36             Items items = new Items();
          37             if ("byq".equals(level.getValue())) {
          38                 items.add(new Item("sc""沙涌"));
          39                 items.add(new Item("tx""棠下"));
          40                 items.add(new Item("bz""北站"));
          41                 items.add(new Item("syl""三元里"));
          42             }
          43             return items;
          44         }
          45         // 第五個級別不用觸發
          46         return null;
          47     }
          這個方法看起來有點長,但是很簡單,如果要實現更多的級聯,就繼續寫 else if 或 switch吧. 當然這只是模擬,

          實際應用中你可以從數據庫中取出數據,進行徇環。

          以下是QFaces的下載地址,如果你在使用過程中遇到問題,可以與我聯系!歡迎交流學習。

          QFaces 下載頁面 -- 基于JSF的Ajax增強框架。


          -----------------以下是 linkage 這個組件的屬性說明,只有兩個屬性而已:


          屬性

          類型

          說明

          必需

          for

          String

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

          for=”id1,id2,id3” 將需要變成多級聯動的頁面組件的id”,”號隔開.這時,id1,id2,id3將被變成三級聯動.

          級別依次為:0, 1, 2 (你可以在后臺綁定的方法中獲得用戶的觸發級別)

          listener

          Method

          組件所綁定的后臺偵聽方法,方法簽名如下:

          Items listener(Level)

          你可以從參數Level中獲得用戶當前觸發的下拉框的級別,當前值及label


















          好吧,再來一張,看看是否有淘寶購物時的感覺!

          Linkage示例


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

          posted on 2008-11-20 15:48 huliqing 閱讀(3499) 評論(8)  編輯  收藏 所屬分類: JSF

          評論

          # re: QFaces1.1 -- 二級,三級,四級聯動...,好吧,來個超級聯動! JSF 與 Ajax可以這樣完美的結合 2008-11-20 23:09 murainwood

          丑陋的實現。后臺就是后臺,前臺就是前臺。JavaScript+HTML+Ajax提交,想做成什么就做成什么。反正是提交一串數據,服務器返回一串數據,多么簡單和清晰。Java也好,靜態索引文件也好,PHP也好,ASP也好,CGI 也好...明白其中HTTP的原理,明白HTML的原理,這種小玩意兒信手拈來,有必要這樣做么?
          前臺就是前臺,后臺就是后臺,能解耦,盡量解耦  回復  更多評論   

          # re: QFaces1.1 -- 二級,三級,四級聯動...,好吧,來個超級聯動! JSF 與 Ajax可以這樣完美的結合 2008-11-21 00:14 huliqing

          @murainwood
          程序這東西本來就是0101構成的,你要是知道怎么排序0與1,你都可以自己信手打個操作系統出來。
          你明白操作系統的原理,你會不會自己也搞個windows出來?
          如果考慮時間,精力,效率,金錢,你一定不會去這么做。
          做組件是為了簡化開發過程!你不知道你每天都在使用組件么?
          只是組件有好有差而已,我不認為這個組件就是很好的,如果你有更好的實現,我一定向你學習,當然!我是誠心的,我也希望自己每一天都是在進步, 而且我一定會做得更好!  回復  更多評論   

          # re: QFaces1.1 -- 二級,三級,四級聯動...,好吧,來個超級聯動! JSF 與 Ajax可以這樣完美的結合 2008-11-21 09:33 myloon

          樓頂的murainwood
          說JavaScript+HTML+Ajax就可以,我覺得你根本就沒有做過太多的項目,也只是小打小鬧過,JavaScript+HTML+Ajax確實可以,但是你不覺得它浪費了更多的時間嗎,那樣跟CS程序有什么區別呢,你還不如直接用微軟的工具拖出來個界面,打成ActiveX包嵌入到網頁得了,比你的JavaScript+HTML+Ajax來的快,直接和數據庫打交道,也不需要你寫什么后臺代碼了,還要生成你的JavaScript+HTML+Ajax需要的一串數據,你覺得那樣不煩嗎,轉來轉去,就為了那串數據,打成ActiveX包吧也比你JavaScript+HTML+Ajax的安全,樓頂的murainwood就做你的JavaScript+HTML+Ajax夢吧。
          我支持huliqing,繼續努力,寫出更好的組件!
            回復  更多評論   

          # re: QFaces1.1 -- 二級,三級,四級聯動...,好吧,來個超級聯動! JSF 與 Ajax可以這樣完美的結合 2008-11-23 18:02 TiGERTiAN

          @murainwood
          樓頂的,你做項目如果都用JavaScript+HTML+Ajax,那只能說你們的應用“太復雜”了,沒有辦法用現成可用的控件來實現,況且樓主是寫的JSF控件配合JSF一起用的,類似于asp.net,做開發的時候一般還是用現成的成熟些的控件多些的,項目經理不會允許你花自己寫JavaScript+HTML+Ajax來完成網上到處都是解決方案的控件的。  回復  更多評論   

          # re: QFaces1.1 -- 二級,三級,四級聯動...,好吧,來個超級聯動! JSF 與 Ajax可以這樣完美的結合 2008-11-24 14:48

          我支持樓主的做法,jsf提供了一個很好的框架供我們去實現那么好的級聯菜單,這是jsf這種新框架帶給我們的禮物,要好好的學習啊!  回復  更多評論   

          # re: QFaces1.1 -- 二級,三級,四級聯動...,好吧,來個超級聯動! JSF 與 Ajax可以這樣完美的結合 2008-11-25 15:21 LQL

          您好,我想請教一下,那個到城市區域街道的聯動數據,能發給我一份嗎,
          lql008@sina.com謝謝了。  回復  更多評論   

          # re: QFaces1.1 -- 二級,三級,四級聯動...,好吧,來個超級聯動! JSF 與 Ajax可以這樣完美的結合 2008-12-20 17:56 Luby

          我不想說了,JSF就是一個框架,但是JSF里又有很多子框架,用JSF不如用ASP.NET  回復  更多評論   

          # re: QFaces1.1 -- 二級,三級,四級聯動...,好吧,來個超級聯動! JSF 與 Ajax可以這樣完美的結合 2012-07-24 15:25 劉永全

          public Items listener(Level level) {
          我是新手,請問能不能看看整個的java代碼這個函數不能獨立運行吧????  回復  更多評論   

          導航

          統計

          公告

          文章原創,歡迎轉載
          ——轉載請注明出處及原文鏈接

          隨筆分類(60)

          隨筆檔案(33)

          最新評論

          評論排行榜

          主站蜘蛛池模板: 洮南市| 曲阳县| 龙海市| 柯坪县| 卫辉市| 丰台区| 克山县| 福建省| 会昌县| 台州市| 孟州市| 雷波县| 汝阳县| 南汇区| 固镇县| 山丹县| 曲阜市| 安平县| 冕宁县| 桦南县| 北京市| 广饶县| 阿拉尔市| 岳阳县| 曲沃县| 沙湾县| 游戏| 潍坊市| 班戈县| 卢龙县| 霸州市| 即墨市| 大关县| 防城港市| 甘德县| 澜沧| 米脂县| 巴南区| 衡阳县| 漳平市| 闽侯县|