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

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

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

    efa's blog

    以用戶角度出發(fā),你就已經(jīng)成功一半了.

    導(dǎo)航

    <2005年8月>
    31123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    統(tǒng)計(jì)

    常用鏈接

    留言簿(18)

    我參與的團(tuán)隊(duì)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    Bi report

    dba

    info security

    other

    perl

    php

    python

    tech blogs

    tech websites

    最新隨筆

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    無(wú)限級(jí)分類設(shè)計(jì)

    • 前言
               無(wú)限級(jí)分類其實(shí)在很多項(xiàng)目中需要應(yīng)用,例如一些企業(yè)部門的分級(jí),區(qū)域劃分及至商品類別的劃分等,數(shù)據(jù)之間是分等級(jí)存在的.結(jié)構(gòu)如下
      area name                       LEVEL 
      中國(guó)                               
      1
        華南地區(qū)                     
      2
                    廣州                 
      3   
                    廣西                 
      3
           華東地區(qū)                     
      2
      美國(guó)                               
      1
           北美                          
      2
           南美                          
      2

      C/S開(kāi)發(fā)中有很方便快捷的控件支持可以快速開(kāi)發(fā),然而在web 應(yīng)用中總需要我們進(jìn)行大量的設(shè)計(jì)及編碼.本文以區(qū)域(area)為例介紹web app中無(wú)限級(jí)分類設(shè)計(jì)。

      主要設(shè)計(jì)思考:
      A  DAO層返回分層次的 area  數(shù)據(jù) 
      B  jsp接收翻譯為XML格式化文件
      C  js DOM 操作格式化
      D  HTC接收格式化后的html
      E  控制綁定上HTC,響應(yīng)onclick事件,進(jìn)行操作
      效果圖如下:

      areatree.gif

      說(shuō)明:本設(shè)計(jì)涉及到業(yè)務(wù)邏輯以及view層的設(shè)計(jì)
      oracle sql 在分等級(jí)的查詢中做到了很好的支持,關(guān)于oracle中的分等級(jí)查詢使用,如下
    The START WITH . . . CONNECT BY clause

    The PRIOR operator

    The 
    LEVEL pseudocolumn

    筆者另一篇未完BLOG:
                齊來(lái)學(xué)習(xí)oracle Mastering Oracle SQL 之 Hierarchical Queries/分等級(jí)的查詢
    將會(huì)介紹到 : )
    • 業(yè)務(wù)邏輯
      1、進(jìn)行多級(jí)分類,傳統(tǒng)比較笨的辦法就是建立N多的表進(jìn)行關(guān)聯(lián),
            例如:
            (國(guó)家)country  1-*  (省份)province 1-* (市)city …………等等
            然而這樣就屬于有限分級(jí),每增加一個(gè)級(jí)別都要增加相關(guān)的表及修改N多源碼.
            再者區(qū)域劃分并不是國(guó)家,省份,市這樣簡(jiǎn)單的劃分能說(shuō)明問(wèn)題的。
      2、更優(yōu)的設(shè)計(jì) - 自己關(guān)聯(lián)自己
            area _no                    <-|
            code                              
      |
            name                             
      |
            father_area_no 
      ---------|
            
            每個(gè)area都有一個(gè)father_area_no字段,關(guān)聯(lián)到其所屬區(qū)域,如無(wú)可為0或null
        然后使用oracle的超級(jí)等級(jí)查詢sql

      select t.*level from area t
       
      start with t.father_area_no is null             
       connect 
      by prior t.area_no = t.father_area_no    //關(guān)系
       
      order SIBLINGS by area_no                            //排序
      //////////////////////////////////////////////////////////////////////////////////////////////////
        AREA_NO CODE                 NAME            PARENT_ID      LEVEL
      ---------- -------------------- -------------- ---------- ----------
             1 A0001                中國(guó)                              1
             2 A0002                華南地區(qū)                      1                       2
             3 A0002-1              廣東                            1                        3
             4 A0002-2              廣西                            2                       3
             5 A0002-3              福建                            2                       3
             6 A0002-4              還是不知道的            2                        3
             7 A0003                華東地區(qū)                     1                        2

      3、hibernate3原生sql的支持
          public List getGoodsCatalogTree()
          
      {
              String treeSql 
      = "select {t.*}, level from area t  " +
                      
      " start with t.parent_catalog_no is null " +
                      
      " connect by prior t.goods_catalog_no = t.parent_catalog_no " +
                      
      " order SIBLINGS by goods_catalog_no";

              
      return getSession().createSQLQuery(treeSql)
                      .addEntity(
      "t", GoodsCatalog.class)
                      .addScalar(
      "level", Hibernate.INTEGER).setParameter(0,"A:valid").list();
          }

    • VIEW層設(shè)計(jì)
      說(shuō)明,本文hibernate為演示

      1、tree.jsp 接收 hibernate 返回的list并翻譯為XML格式 
           效果如下:
       <?xml version="1.0" encoding="GBK" ?> 
      <tree>
        
      <tree text="根類別" sId="" action="selectThis(this)" /> 
      <tree text="中國(guó)" sId="221" action="selectThis(this)">
      <tree text="華南地區(qū)" sId="222" action="selectThis(this)">
        
      <tree text="廣東" sId="242" action="selectThis(this)" /> 
        
      <tree text="廣西" sId="244" action="selectThis(this)" /> 
        
      <tree text="福建" sId="245" action="selectThis(this)" /> 
        
      <tree text="還是不知道的" sId="247" action="selectThis(this)" /> 
        
      </tree>
      <tree text="華東地區(qū)" sId="241" action="selectThis(this)">
        </tree>
        
      </tree>
        
      </tree>
      BTW:   關(guān)于如何實(shí)現(xiàn),可參考筆者另一篇文章:
        http://www.tkk7.com/davidxu/archive/2005/08/18/10424.html

      2、js DOM解析(筆者使用的是http://webfx.eae.net/ 提供的樹(shù))

           pretree.gif
      3、htc 編寫,作為js DOM 解析后容器 
            有關(guān)于htc更詳細(xì)的資料請(qǐng)參考相關(guān)教程,如你覺(jué)得HTC并不適合,可以自己再做相關(guān)的封裝實(shí)現(xiàn)一樣的效果.
      //初始化
      <PUBLIC:ATTACH EVENT="ondocumentready" ONEVENT="InitElement()" />
        // 響應(yīng)onclick事件
      <PUBLIC:ATTACH EVENT="onclick" ONEVENT="keyDownElement()" />

      ………………
      ………………
      //
      function InitElement()
      {
       var IFRAMEsrc = "<IFRAME border=0 id='multisortTreediv' src='"+ datapage +"'></IFRAME>";
       element.document.body.insertAdjacentHTML("AfterBegin",IFRAMEsrc);
      }
      function keyDownElement()
      {
          //顯示隱藏層
      }


      4、area編輯頁(yè)面中的所屬區(qū)域控件的調(diào)用
       <input type="text" class="text" id="areaName" 
                                     
      objectId="fatherAreaNo"  
                                      name
      ="fatherArea.name"  size="48" 
                                      datapage
      ="/multi-sortTree.jsp?page=/setup/area.do?msg=getAreaTree" 
                                      style="behavior:url(/js/multi-sortTree.htc);" value="">
                         
      <input type="hidden" name="fatherArea.areaNo" id="fatherAreaNo" value="">

      后注:本文只是一種設(shè)計(jì)思想的介紹,并不提供源碼:)
      (本文完! )

    posted on 2005-08-17 14:13 一凡@ITO 閱讀(5824) 評(píng)論(5)  編輯  收藏

    評(píng)論

    # re: 無(wú)限級(jí)分類設(shè)計(jì) 2005-08-18 09:51 hope

    老大能不能說(shuō)說(shuō)怎么有數(shù)據(jù)庫(kù)聲稱xml呢 給各類 讓我學(xué)習(xí)學(xué)習(xí)好么?
    還有個(gè)問(wèn)題 我用xml樹(shù)發(fā)現(xiàn)刷新有點(diǎn)問(wèn)題 就是我選擇一個(gè)節(jié)點(diǎn)顯示頁(yè)面 然后進(jìn)行數(shù)據(jù)提交或者更新什么的 然后去別的頁(yè)面 最后通過(guò)節(jié)點(diǎn)回來(lái)發(fā)現(xiàn) 頁(yè)面沒(méi)有刷新 也就是沒(méi)有顯示更新過(guò)的數(shù)據(jù) 這個(gè)怎么解決阿  回復(fù)  更多評(píng)論   

    # re: 無(wú)限級(jí)分類設(shè)計(jì) 2005-08-18 11:22 一天一點(diǎn)

    1、"數(shù)據(jù)庫(kù)聲稱xml" 應(yīng)該是數(shù)據(jù)庫(kù)生成XML吧?
    這個(gè)問(wèn)題等下班再寫。比較復(fù)雜的東東
    2、“頁(yè)面沒(méi)有刷新”首先要確認(rèn)數(shù)據(jù)庫(kù)是否真的變化了。確認(rèn)后沒(méi)變化考慮一下是否緩存的問(wèn)題,可以在meta內(nèi)定義no-cache
    <meta http-equiv=Expires content=0>
    <meta http-equiv=Pragma content=no-cache>
    <meta http-equiv=Cache-Control content=no-cache>
      回復(fù)  更多評(píng)論   

    # re: 無(wú)限級(jí)分類設(shè)計(jì) 2005-08-18 12:35 hope

    老大謝謝你回答我的問(wèn)題 期待你對(duì)生成xml的文章 呵呵 還有就是老大做過(guò)通過(guò)java寫入word文件么我最近要做個(gè)這個(gè)東西 老大說(shuō)的方法我現(xiàn)在去試驗(yàn)一下 呵呵  回復(fù)  更多評(píng)論   

    # re: 無(wú)限級(jí)分類設(shè)計(jì) 2005-08-30 12:22 hope me fly

    為什么不提供源碼阿,給啦  回復(fù)  更多評(píng)論   

    # re: 無(wú)限級(jí)分類設(shè)計(jì) 2014-01-07 10:56 ##

    @hope me fly
    大撒旦撒倒薩倒薩  回復(fù)  更多評(píng)論   


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲成人影院在线观看| 18禁网站免费无遮挡无码中文 | 91短视频免费在线观看| 久久精品亚洲日本波多野结衣| 国产亚洲成av片在线观看| 大地资源二在线观看免费高清| 亚洲国产成人综合精品| 久久亚洲AV成人出白浆无码国产 | 亚洲日韩中文字幕日韩在线| 好先生在线观看免费播放| 美女内射无套日韩免费播放| 国产一二三四区乱码免费| 日韩一级片免费观看| 亚洲AV色无码乱码在线观看| 亚洲精品国产日韩| 亚洲国产精品午夜电影| 18亚洲男同志videos网站| 久久久久久久综合日本亚洲| 国产精品亚洲高清一区二区| 日韩精品电影一区亚洲| 日韩午夜免费视频| 日韩一级在线播放免费观看| 大香人蕉免费视频75| 我要看WWW免费看插插视频| 国内精品乱码卡1卡2卡3免费| 免费在线视频你懂的| 亚洲一级毛片免费看| 成人免费在线看片| 又粗又大又黑又长的免费视频| av无码免费一区二区三区| 美女视频黄是免费的网址| 国产免费AV片在线播放唯爱网 | 97se亚洲国产综合自在线| 亚洲人成电影网站| 久久久国产亚洲精品| 亚洲欧洲AV无码专区| 国产精品国产亚洲区艳妇糸列短篇 | 好看的电影网站亚洲一区| 久久亚洲国产成人亚| 亚洲日韩图片专区第1页| 亚洲高清无在码在线无弹窗 |