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

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

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

    efa's blog

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

    導航

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

    統計

    常用鏈接

    留言簿(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 閱讀(5830) 評論(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
    大撒旦撒倒薩倒薩  回復  更多評論   


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


    網站導航:
     
    主站蜘蛛池模板: 永久黄网站色视频免费直播| 一级毛片不卡片免费观看| 四虎永久免费网站免费观看| 亚洲日韩精品无码AV海量| 国产午夜鲁丝片AV无码免费| 日韩欧美亚洲国产精品字幕久久久| 免费A级毛片无码A∨男男| 尤物永久免费AV无码网站| 香港一级毛片免费看| 狠狠亚洲狠狠欧洲2019| 久久久免费的精品| 亚洲av永久无码精品三区在线4| 麻豆国产入口在线观看免费| 性生大片视频免费观看一级| 亚洲成av人在线视| 亚洲熟妇AV乱码在线观看| 免费无码毛片一区二区APP| 亚洲国产成人资源在线软件| 免费h片在线观看网址最新| 四虎亚洲精品高清在线观看| 免费播放春色aⅴ视频| 人人爽人人爽人人片av免费| 亚洲日韩在线中文字幕第一页| av网站免费线看| 久久亚洲sm情趣捆绑调教| 国产成人免费全部网站| 丝袜足液精子免费视频| 精品久久久久久亚洲精品| www亚洲一级视频com| 色拍自拍亚洲综合图区| 最近免费中文字幕视频高清在线看| 免费人成视频在线播放| 777亚洲精品乱码久久久久久| 欧洲精品免费一区二区三区 | 在线综合亚洲欧洲综合网站| 亚洲AⅤ无码一区二区三区在线| 久久国产精品免费视频| 亚洲www在线观看| 亚洲日本中文字幕天堂网| 黄色片免费在线观看| 亚洲AV无码国产精品色|