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

    最新評論

    評論排行榜

    主站蜘蛛池模板: 999任你躁在线精品免费不卡| 1000部禁片黄的免费看| 亚洲?v女人的天堂在线观看| 无遮挡免费一区二区三区| 久久精品国产亚洲综合色| 日韩一级在线播放免费观看| 国产特黄特色的大片观看免费视频| 亚洲AV日韩AV天堂久久| 亚洲国产日韩在线观频| 成人毛片18岁女人毛片免费看 | 亚洲日韩一区二区三区| 九月丁香婷婷亚洲综合色| 国产成人免费a在线视频app| 95免费观看体验区视频| 在线免费播放一级毛片| 日本高清不卡中文字幕免费| 亚洲狠狠婷婷综合久久蜜芽| 亚洲人成毛片线播放| 337p日本欧洲亚洲大胆艺术| 亚洲国产精品无码专区在线观看| 亚洲精品99久久久久中文字幕 | 国产av无码专区亚洲av桃花庵 | 亚洲妇女水蜜桃av网网站| 久久国产亚洲电影天堂| 亚洲精品午夜无码电影网| 伊人婷婷综合缴情亚洲五月| 亚洲成人国产精品| 亚洲国产AV无码专区亚洲AV| 亚洲中文字幕在线乱码| 亚洲AV无码成人专区片在线观看| 亚洲精品97久久中文字幕无码| 亚洲中文字幕无码专区| 国产亚洲综合成人91精品| 亚洲高清在线视频| 亚洲精品亚洲人成在线播放| 亚洲国产精品久久人人爱| 亚洲Av高清一区二区三区| 新最免费影视大全在线播放| 亚洲免费日韩无码系列| 97公开免费视频| 国产成人无码区免费A∨视频网站 国产成人涩涩涩视频在线观看免费 |