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

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

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

    efa's blog

    以用戶角度出發,你就已經成功一半了.

    導航

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    統計

    常用鏈接

    留言簿(18)

    我參與的團隊

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    Bi report

    dba

    info security

    other

    perl

    php

    python

    tech blogs

    tech websites

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    無限級分類設計

    • 前言
               無限級分類其實在很多項目中需要應用,例如一些企業部門的分級,區域劃分及至商品類別的劃分等,數據之間是分等級存在的.結構如下
      area name                       LEVEL 
      中國                               
      1
        華南地區                     
      2
                    廣州                 
      3   
                    廣西                 
      3
           華東地區                     
      2
      美國                               
      1
           北美                          
      2
           南美                          
      2

      C/S開發中有很方便快捷的控件支持可以快速開發,然而在web 應用中總需要我們進行大量的設計及編碼.本文以區域(area)為例介紹web app中無限級分類設計。

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

      areatree.gif

      說明:本設計涉及到業務邏輯以及view層的設計
      oracle sql 在分等級的查詢中做到了很好的支持,關于oracle中的分等級查詢使用,如下
    The START WITH . . . CONNECT BY clause

    The PRIOR operator

    The 
    LEVEL pseudocolumn

    筆者另一篇未完BLOG:
                齊來學習oracle Mastering Oracle SQL 之 Hierarchical Queries/分等級的查詢
    將會介紹到 : )
    • 業務邏輯
      1、進行多級分類,傳統比較笨的辦法就是建立N多的表進行關聯,
            例如:
            (國家)country  1-*  (省份)province 1-* (市)city …………等等
            然而這樣就屬于有限分級,每增加一個級別都要增加相關的表及修改N多源碼.
            再者區域劃分并不是國家,省份,市這樣簡單的劃分能說明問題的。
      2、更優的設計 - 自己關聯自己
            area _no                    <-|
            code                              
      |
            name                             
      |
            father_area_no 
      ---------|
            
            每個area都有一個father_area_no字段,關聯到其所屬區域,如無可為0或null
        然后使用oracle的超級等級查詢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    //關系
       
      order SIBLINGS by area_no                            //排序
      //////////////////////////////////////////////////////////////////////////////////////////////////
        AREA_NO CODE                 NAME            PARENT_ID      LEVEL
      ---------- -------------------- -------------- ---------- ----------
             1 A0001                中國                              1
             2 A0002                華南地區                      1                       2
             3 A0002-1              廣東                            1                        3
             4 A0002-2              廣西                            2                       3
             5 A0002-3              福建                            2                       3
             6 A0002-4              還是不知道的            2                        3
             7 A0003                華東地區                     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層設計
      說明,本文hibernate為演示

      1、tree.jsp 接收 hibernate 返回的list并翻譯為XML格式 
           效果如下:
       <?xml version="1.0" encoding="GBK" ?> 
      <tree>
        
      <tree text="根類別" sId="" action="selectThis(this)" /> 
      <tree text="中國" sId="221" action="selectThis(this)">
      <tree text="華南地區" 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="華東地區" sId="241" action="selectThis(this)">
        </tree>
        
      </tree>
        
      </tree>
      BTW:   關于如何實現,可參考筆者另一篇文章:
        http://m.tkk7.com/davidxu/archive/2005/08/18/10424.html

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

           pretree.gif
      3、htc 編寫,作為js DOM 解析后容器 
            有關于htc更詳細的資料請參考相關教程,如你覺得HTC并不適合,可以自己再做相關的封裝實現一樣的效果.
      //初始化
      <PUBLIC:ATTACH EVENT="ondocumentready" ONEVENT="InitElement()" />
        // 響應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編輯頁面中的所屬區域控件的調用
       <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="">

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

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

    評論

    # re: 無限級分類設計 2005-08-18 09:51 hope

    老大能不能說說怎么有數據庫聲稱xml呢 給各類 讓我學習學習好么?
    還有個問題 我用xml樹發現刷新有點問題 就是我選擇一個節點顯示頁面 然后進行數據提交或者更新什么的 然后去別的頁面 最后通過節點回來發現 頁面沒有刷新 也就是沒有顯示更新過的數據 這個怎么解決阿  回復  更多評論   

    # re: 無限級分類設計 2005-08-18 11:22 一天一點

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

    # re: 無限級分類設計 2005-08-18 12:35 hope

    老大謝謝你回答我的問題 期待你對生成xml的文章 呵呵 還有就是老大做過通過java寫入word文件么我最近要做個這個東西 老大說的方法我現在去試驗一下 呵呵  回復  更多評論   

    # re: 無限級分類設計 2005-08-30 12:22 hope me fly

    為什么不提供源碼阿,給啦  回復  更多評論   

    # re: 無限級分類設計 2014-01-07 10:56 ##

    @hope me fly
    大撒旦撒倒薩倒薩  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲一欧洲中文字幕在线| 日韩亚洲人成在线综合日本| 亚洲一线产区二线产区精华| 亚洲一区二区在线免费观看| 亚洲国产人成在线观看69网站| 97无码人妻福利免费公开在线视频 | 久久精品国产亚洲av四虎| 三级网站在线免费观看| 亚洲无码在线播放| 中国videos性高清免费| 亚洲AV永久无码精品一百度影院| 在线观看特色大片免费网站| 亚洲精品免费观看| 日本成年免费网站| 亚洲欧美日韩国产成人| 免费a级毛片18以上观看精品| 青草青草视频2免费观看| 亚洲一区二区三区在线观看精品中文| 国产免费一区二区三区不卡 | 亚洲丰满熟女一区二区v| 免费a级毛片高清视频不卡 | 精品久久亚洲中文无码| 国产成人免费a在线视频色戒 | 男人j进入女人j内部免费网站| 日产亚洲一区二区三区| 欧美三级在线电影免费| 无码色偷偷亚洲国内自拍| 亚洲人成电影在线播放| 午夜网站在线观看免费完整高清观看| 亚洲嫩草影院在线观看| 国产免费av一区二区三区| 一级特级aaaa毛片免费观看| 亚洲图片在线观看| 全免费一级午夜毛片| 91精品全国免费观看青青| 日本久久久久亚洲中字幕| 国产免费牲交视频| 99爱视频99爱在线观看免费| 亚洲成a人无码亚洲成av无码| 在线亚洲午夜理论AV大片| 日本三级2019在线观看免费|