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

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

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

    QFaces1.1 -- 二級(jí),三級(jí),四級(jí)聯(lián)動(dòng)...,好吧,來(lái)個(gè)超級(jí)聯(lián)動(dòng)! JSF 與 Ajax可以這樣完美的結(jié)合

     QFaces1.1新增了一個(gè)新的組件,修復(fù)了上一版中的Validator的一個(gè)錯(cuò)誤,同時(shí)附帶了Demo項(xiàng)目.
    新增的組件我叫它超級(jí)聯(lián)動(dòng): Linkage

    為什么叫超級(jí)聯(lián)動(dòng)?

    1.可以無(wú)限聯(lián)動(dòng).
    2.可以不用刷新頁(yè)面.
    3.幾乎沒有性能影響.
    4.你不用改變現(xiàn)有的JSF組件.
    5.而且使用還非常簡(jiǎn)單 : )

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

    for: 指定到頁(yè)面其它selectOne組件的id,無(wú)個(gè)數(shù)限制
    listener: 后臺(tái)方法綁定,返回相應(yīng)的選項(xiàng)列表就可以

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

    關(guān)于下載,安裝,及使用,后面附有鏈接。

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

    以下是html頁(yè)面源碼,只要在第一級(jí)別提供選項(xiàng)就可以:
     1 <h:form>
     2     <!-- 國(guó)家,省份,城市,城區(qū),街道 -->
     3     <h:selectOneMenu id="country"   value="#{LinkageBean.country}">
     4         <f:selectItem itemValue="" itemLabel="" />
     5         <f:selectItem itemValue="China" itemLabel="中國(guó)" />
     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>

    這樣可以讓你無(wú)限的添加 h:selectOne..., 這樣你可以實(shí)現(xiàn)自己的無(wú)限級(jí)聯(lián)。

    下面是后臺(tái)bean所綁定的一個(gè)偵聽方法,該方法只是返回相應(yīng)的選項(xiàng)列表而已

     1 public Items listener(Level level) {
     2         if (level.getLevel() == 0) { // 如果觸發(fā)的是第一級(jí)(國(guó)別)的選擇,返回省級(jí)列表
     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);   // 設(shè)置默認(rèn)值
    12             }
    13             return items;
    14         } else if (level.getLevel() == 1) { // 如果觸發(fā)的是第二級(jí)(省級(jí))的選擇
    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""洛陽(yáng)"));
    24                 items.add(new Item("kf""開封"));
    25             }
    26             return items;
    27         } else if (level.getLevel() == 2) { // 如果觸發(fā)的是第三級(jí)(市級(jí))的選擇
    28             Items items = new Items();
    29             if ("gz".equals(level.getValue())) {
    30                 items.add(new Item("byq""白云區(qū)"));
    31                 items.add(new Item("yxq""越秀區(qū)"));
    32                 items.add(new Item("thq""天河區(qū)"));
    33             }
    34             return items;
    35         } else if (level.getLevel() == 3) { // 如果觸發(fā)的是第四級(jí)(區(qū)級(jí))的選擇
    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         // 第五個(gè)級(jí)別不用觸發(fā)
    46         return null;
    47     }
    這個(gè)方法看起來(lái)有點(diǎn)長(zhǎng),但是很簡(jiǎn)單,如果要實(shí)現(xiàn)更多的級(jí)聯(lián),就繼續(xù)寫 else if 或 switch吧. 當(dāng)然這只是模擬,

    實(shí)際應(yīng)用中你可以從數(shù)據(jù)庫(kù)中取出數(shù)據(jù),進(jìn)行徇環(huán)。

    以下是QFaces的下載地址,如果你在使用過程中遇到問題,可以與我聯(lián)系!歡迎交流學(xué)習(xí)。

    QFaces 下載頁(yè)面 -- 基于JSF的Ajax增強(qiáng)框架。


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


    屬性

    類型

    說明

    必需

    for

    String

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

    for=”id1,id2,id3” 將需要變成多級(jí)聯(lián)動(dòng)的頁(yè)面組件的id”,”號(hào)隔開.這時(shí),id1,id2,id3將被變成三級(jí)聯(lián)動(dòng).

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

    listener

    Method

    組件所綁定的后臺(tái)偵聽方法,方法簽名如下:

    Items listener(Level)

    你可以從參數(shù)Level中獲得用戶當(dāng)前觸發(fā)的下拉框的級(jí)別,當(dāng)前值及label


















    好吧,再來(lái)一張,看看是否有淘寶購(gòu)物時(shí)的感覺!

    Linkage示例


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

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

    評(píng)論

    # re: QFaces1.1 -- 二級(jí),三級(jí),四級(jí)聯(lián)動(dòng)...,好吧,來(lái)個(gè)超級(jí)聯(lián)動(dòng)! JSF 與 Ajax可以這樣完美的結(jié)合 2008-11-20 23:09 murainwood

    丑陋的實(shí)現(xiàn)。后臺(tái)就是后臺(tái),前臺(tái)就是前臺(tái)。JavaScript+HTML+Ajax提交,想做成什么就做成什么。反正是提交一串?dāng)?shù)據(jù),服務(wù)器返回一串?dāng)?shù)據(jù),多么簡(jiǎn)單和清晰。Java也好,靜態(tài)索引文件也好,PHP也好,ASP也好,CGI 也好...明白其中HTTP的原理,明白HTML的原理,這種小玩意兒信手拈來(lái),有必要這樣做么?
    前臺(tái)就是前臺(tái),后臺(tái)就是后臺(tái),能解耦,盡量解耦  回復(fù)  更多評(píng)論   

    # re: QFaces1.1 -- 二級(jí),三級(jí),四級(jí)聯(lián)動(dòng)...,好吧,來(lái)個(gè)超級(jí)聯(lián)動(dòng)! JSF 與 Ajax可以這樣完美的結(jié)合 2008-11-21 00:14 huliqing

    @murainwood
    程序這東西本來(lái)就是0101構(gòu)成的,你要是知道怎么排序0與1,你都可以自己信手打個(gè)操作系統(tǒng)出來(lái)。
    你明白操作系統(tǒng)的原理,你會(huì)不會(huì)自己也搞個(gè)windows出來(lái)?
    如果考慮時(shí)間,精力,效率,金錢,你一定不會(huì)去這么做。
    做組件是為了簡(jiǎn)化開發(fā)過程!你不知道你每天都在使用組件么?
    只是組件有好有差而已,我不認(rèn)為這個(gè)組件就是很好的,如果你有更好的實(shí)現(xiàn),我一定向你學(xué)習(xí),當(dāng)然!我是誠(chéng)心的,我也希望自己每一天都是在進(jìn)步, 而且我一定會(huì)做得更好!  回復(fù)  更多評(píng)論   

    # re: QFaces1.1 -- 二級(jí),三級(jí),四級(jí)聯(lián)動(dòng)...,好吧,來(lái)個(gè)超級(jí)聯(lián)動(dòng)! JSF 與 Ajax可以這樣完美的結(jié)合 2008-11-21 09:33 myloon

    樓頂?shù)膍urainwood
    說JavaScript+HTML+Ajax就可以,我覺得你根本就沒有做過太多的項(xiàng)目,也只是小打小鬧過,JavaScript+HTML+Ajax確實(shí)可以,但是你不覺得它浪費(fèi)了更多的時(shí)間嗎,那樣跟CS程序有什么區(qū)別呢,你還不如直接用微軟的工具拖出來(lái)個(gè)界面,打成ActiveX包嵌入到網(wǎng)頁(yè)得了,比你的JavaScript+HTML+Ajax來(lái)的快,直接和數(shù)據(jù)庫(kù)打交道,也不需要你寫什么后臺(tái)代碼了,還要生成你的JavaScript+HTML+Ajax需要的一串?dāng)?shù)據(jù),你覺得那樣不煩嗎,轉(zhuǎn)來(lái)轉(zhuǎn)去,就為了那串?dāng)?shù)據(jù),打成ActiveX包吧也比你JavaScript+HTML+Ajax的安全,樓頂?shù)膍urainwood就做你的JavaScript+HTML+Ajax夢(mèng)吧。
    我支持huliqing,繼續(xù)努力,寫出更好的組件!
      回復(fù)  更多評(píng)論   

    # re: QFaces1.1 -- 二級(jí),三級(jí),四級(jí)聯(lián)動(dòng)...,好吧,來(lái)個(gè)超級(jí)聯(lián)動(dòng)! JSF 與 Ajax可以這樣完美的結(jié)合 2008-11-23 18:02 TiGERTiAN

    @murainwood
    樓頂?shù)模阕鲰?xiàng)目如果都用JavaScript+HTML+Ajax,那只能說你們的應(yīng)用“太復(fù)雜”了,沒有辦法用現(xiàn)成可用的控件來(lái)實(shí)現(xiàn),況且樓主是寫的JSF控件配合JSF一起用的,類似于asp.net,做開發(fā)的時(shí)候一般還是用現(xiàn)成的成熟些的控件多些的,項(xiàng)目經(jīng)理不會(huì)允許你花自己寫JavaScript+HTML+Ajax來(lái)完成網(wǎng)上到處都是解決方案的控件的。  回復(fù)  更多評(píng)論   

    # re: QFaces1.1 -- 二級(jí),三級(jí),四級(jí)聯(lián)動(dòng)...,好吧,來(lái)個(gè)超級(jí)聯(lián)動(dòng)! JSF 與 Ajax可以這樣完美的結(jié)合 2008-11-24 14:48

    我支持樓主的做法,jsf提供了一個(gè)很好的框架供我們?nèi)?shí)現(xiàn)那么好的級(jí)聯(lián)菜單,這是jsf這種新框架帶給我們的禮物,要好好的學(xué)習(xí)啊!  回復(fù)  更多評(píng)論   

    # re: QFaces1.1 -- 二級(jí),三級(jí),四級(jí)聯(lián)動(dòng)...,好吧,來(lái)個(gè)超級(jí)聯(lián)動(dòng)! JSF 與 Ajax可以這樣完美的結(jié)合 2008-11-25 15:21 LQL

    您好,我想請(qǐng)教一下,那個(gè)到城市區(qū)域街道的聯(lián)動(dòng)數(shù)據(jù),能發(fā)給我一份嗎,
    lql008@sina.com謝謝了。  回復(fù)  更多評(píng)論   

    # re: QFaces1.1 -- 二級(jí),三級(jí),四級(jí)聯(lián)動(dòng)...,好吧,來(lái)個(gè)超級(jí)聯(lián)動(dòng)! JSF 與 Ajax可以這樣完美的結(jié)合 2008-12-20 17:56 Luby

    我不想說了,JSF就是一個(gè)框架,但是JSF里又有很多子框架,用JSF不如用ASP.NET  回復(fù)  更多評(píng)論   

    # re: QFaces1.1 -- 二級(jí),三級(jí),四級(jí)聯(lián)動(dòng)...,好吧,來(lái)個(gè)超級(jí)聯(lián)動(dòng)! JSF 與 Ajax可以這樣完美的結(jié)合 2012-07-24 15:25 劉永全

    public Items listener(Level level) {
    我是新手,請(qǐng)問能不能看看整個(gè)的java代碼這個(gè)函數(shù)不能獨(dú)立運(yùn)行吧????  回復(fù)  更多評(píng)論   

    導(dǎo)航

    統(tǒng)計(jì)

    公告

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

    隨筆分類(60)

    隨筆檔案(33)

    最新評(píng)論

    評(píng)論排行榜

    主站蜘蛛池模板: 在线aⅴ亚洲中文字幕| 最近中文字幕无免费视频| 国产成人亚洲精品电影| 亚洲日本va午夜中文字幕一区| 又大又硬又爽免费视频| 国产乱子精品免费视观看片| a毛片免费全部播放完整成| 国产成人亚洲精品91专区高清 | 免费播放美女一级毛片| 亚洲国产成AV人天堂无码| 亚洲国产a∨无码中文777| 亚洲 综合 国产 欧洲 丝袜 | 国内成人精品亚洲日本语音 | 97国产免费全部免费观看| 麻豆精品不卡国产免费看| 人妻仑乱A级毛片免费看| 美国毛片亚洲社区在线观看 | 国产成人精品免费视频软件| 永久免费av无码不卡在线观看| 无码AV片在线观看免费| 国产拍拍拍无码视频免费| 亚欧乱色国产精品免费视频| 老司机午夜精品视频在线观看免费| 亚洲人成网站在线在线观看| 亚洲综合色丁香婷婷六月图片| www.亚洲日本| 久久精品国产亚洲AV久| 亚洲一区二区三区深夜天堂| 亚洲高清视频免费| 亚洲明星合成图综合区在线| 亚洲综合在线成人一区| 亚洲色图视频在线观看| 亚洲成人动漫在线观看| 亚洲三级在线免费观看| 精品国产成人亚洲午夜福利| 亚洲精品无码不卡在线播放| 亚洲AV无码一区二区一二区| 国产精品亚洲专一区二区三区| 亚洲AV香蕉一区区二区三区| 国产AV日韩A∨亚洲AV电影| 视频免费1区二区三区|