<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 閱讀(3498) 評論(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)

    最新評論

    評論排行榜

    主站蜘蛛池模板: 亚洲AV人无码综合在线观看| 亚洲日韩精品国产3区| 亚洲熟妇无码另类久久久| 久久精品乱子伦免费| a国产成人免费视频| 国产偷伦视频免费观看| 成在人线av无码免费高潮喷水| 亚洲国产美女福利直播秀一区二区| 免费乱码中文字幕网站| 99在线观看视频免费| 免费A级毛片无码A∨中文字幕下载| WWW亚洲色大成网络.COM| 久久精品亚洲日本波多野结衣 | 一个人晚上在线观看的免费视频| 亚洲一卡2卡三卡4卡有限公司| 国产成人一区二区三区免费视频| 每天更新的免费av片在线观看 | 最新国产AV无码专区亚洲| 亚洲日韩激情无码一区| 亚洲国产精品第一区二区| 老汉色老汉首页a亚洲| 精品亚洲成在人线AV无码| 亚洲欧美国产国产综合一区| 国产产在线精品亚洲AAVV| jizz免费一区二区三区| 免费在线看黄的网站| 18禁男女爽爽爽午夜网站免费| 在线观看免费视频一区| 99久久99久久免费精品小说 | 亚洲伊人成无码综合网| 国产精品国产免费无码专区不卡| 亚洲电影在线免费观看| 成人免费毛片视频| 亚洲精品视频在线观看免费| 四虎永久在线精品免费网址| 免费在线观看你懂的| 亚洲AV日韩AV永久无码久久| 亚洲av无码专区在线| 一级做a爰片久久毛片免费看| 亚洲aⅴ无码专区在线观看春色| 久久精品国产亚洲av麻豆图片|