<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

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    [多級分類樹設計] 如何將取得controller層返回的list以生成XML格式的數據

             前段時間寫了篇關于多級分類樹的設計:
             http://www.tkk7.com/davidxu/archive/2005/08/17/multilevelTree.html
            有網友問到如果將取得的list數據生成為XML格式的數據
    以方便js 解釋。在這里另起一筆。簡單介紹,供大家參考一下 :)

    筆者簡單做一個demo

    1、最快搭起示范例子
    <%!
        
    //取得 tree List
         private List getTree()
         
    {
            List treeList 
    = new ArrayList();
            
    //
            return treeList;
         }

    %>
    <%
        List treeList 
    = getTree();
        request.setAttribute(
    "treeList",treeList);
    %>
    <?xml version="1.0" encoding="GBK"?>
    <tree>
       
    <c:forEach var="tree" items="${treeList}">
            
    <tree text="<c:out value='${tree.name}'/>" />
       
    </c:forEach>
    </tree>

    執行以上代碼可以發現生成的文件內容將會為以下所示
     <?xml version="1.0" encoding="GBK" ?>
    - <tree>
            <tree text="中國" />
        <tree text="華南地區" />
           <tree text="廣東" />
           <tree text="廣西" />
            <tree text="華北地區" />
    </tree>

    2、例子存在問題
           很容易發現,以上的辦法并不是我們所期待的,根本沒有等級劃分:(
           再來看我們其實想實現的效果應該如下, [筆者加了注釋以方便說明問題]
    <?xml version="1.0" encoding="GBK"?>
    <tree>                                                     // 等級
            
    <tree text="中國">                          //1      不關閉
                <tree text="華南地區">              //2      不關閉
                   <tree text="廣東"></tree>        //3      關閉
                      <tree text="廣西"></tree>        //3  關閉
        </tree>
                                           //         再一次關閉
               <tree text="華北地區" />             //2      關閉
            </tree>                                             //        再一次關閉
               <tree text="筆者虛擬的,并不存在" / > //1
    </tree>

    3、找尋規律
       
        節點何時關閉?????這是關鍵的………………
         
        如果你認真地觀察(可能更多的數據會更清楚),很快就可以看到規律了.
        如上面注釋所示:
     "中國"  ->  "華南地區" 1-> 2    (2>1,不關閉)
        "華南地區"  -> "廣東 "    2->3    (3>2 ,不關閉)     
        "廣東"  -> "廣西 "            3->3    (3=3  ,關閉1 次)     
        "廣西"  -> "華北地區 "    3->2    (3<2  ,關閉 2 次)     

    最后:華北地區后就沒有了,
               我們可以模擬一個最高級別的區域,可以想象"華北地區"下一個就是最高級別的區域
       '華北地區' - >' 筆者虛擬的,并不存在'   2->1  (2<1 關閉2 次)

     當下一個區域的級別(LEVEL)高于或等于當前區域(數值上相反,小于上一個區域) 的時候,當前區域就應該關閉N次,公式表示為 N  *  </tree> ,至于N等于多少,即取決于下一個區域的級別與當前區域的級別的差距.
         
      3-3 = 0 關閉一次
      3-2 =1 關閉二次
     …………
     …………
    如果你愿意,可以增加更多等級的區域,以確認有這樣的一種規律:
    N = (上一個級別 - 下一個級別) + 1   
    前提是下一個級別 <= 上一個級別

    源代碼
     <%!
           
    private void closeNodes(JspWriter out,int nowLevel,int oldLevel) throws Exception
        
    {
           
    int num = (oldLevel - nowLevel) + 1;
           
    for (int j = 0; j < num; j++)
           
    {
               
    out.println("</tree>");
           }

        }

    %>
    <%
        List treeList 
    = getTree();
        request.setAttribute(
    "treeList", treeList);
    %>
    <?xml version="1.0" encoding="GBK"?>
    <tree>
       
    <c:forEach var="tree" items="${treeList}">
           
    <c:set var="nowLevel" value="${tree.LEVEL}"/>
         
    <%
           
    //取當前級別
           int nowLevel = Integer.parseInt(pageContext.getAttribute("nowLevel").toString());
           
    int oldLevel = 0;
           
    if (pageContext.getAttribute("oldLevel"!= null)
           
    {
               
    //取上一級別
               oldLevel = Integer.parseInt(pageContext.getAttribute("oldLevel").toString());
           }

       
    %>
           
    <%
               
    if (oldLevel != 0)
               
    {
                   
    if (nowLevel <= oldLevel)
                   
    {
                       closeNodes(
    out,nowLevel,oldLevel);
                   }

               }

           
    %>
           
    <tree text="<c:out value="${tree.name}"/>">
           
    <c:set var="oldLevel" value="${tree.LEVEL}"/>
       
    </c:forEach>
       
    <%
           
    int lastLevel = Integer.parseInt(pageContext.getAttribute("oldLevel").toString());
             // 最后一級別為最高 1
           closeNodes(
    out,1,lastLevel);
       
    %>
    </tree>

    寫得比較快,歡迎查bug : )
     (本文完)

    posted on 2005-08-18 13:37 一凡@ITO 閱讀(2539) 評論(3)  編輯  收藏

    評論

    # re: [多級分類樹設計] 如何將取得controller層返回的list以生成XML格式的數據 2005-08-19 10:16 hope

    老大看了你的文章讓我大概明白怎么回事了 我的xml的樹節點判斷跟你這個不大一樣
    老大要是需要我可以給老大一份呵呵 ,上邊有幾個例子是asp的 我主要不知道java怎么寫成xml文件用jdom么 還是有什么更簡單的辦法 老大幫幫我呵呵 我的郵箱zxggwan@163.com  回復  更多評論   

    # re: [多級分類樹設計] 如何將取得controller層返回的list以生成XML格式的數據 2005-08-19 11:39 hope

    老大你能留個msn或者郵箱么 我給你一些程序幫我看看 我找到一些比較好的標簽的類是朋友公司的 可是我初學沒多久 所以看不懂 清老大幫我看看呵呵  回復  更多評論   

    # re: [多級分類樹設計] 如何將取得controller層返回的list以生成XML格式的數據 2005-08-22 09:11 goodbaby

    沒看明白,遍歷的時候是怎么遍歷,好象是用xsl,沒看出遞歸的代碼。不明白,學習中。。。  回復  更多評論   


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


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 在线播放亚洲精品| 国产在线ts人妖免费视频| 在线播放免费人成视频网站| 亚洲中文字幕在线无码一区二区| 特级毛片A级毛片100免费播放| 999国内精品永久免费视频| 日韩在线视频播放免费视频完整版 | 免费国产成人午夜在线观看| 亚洲s码欧洲m码吹潮| 亚洲欧洲校园自拍都市| 国产亚洲人成无码网在线观看| 精品一区二区三区免费毛片爱 | 亚洲A∨精品一区二区三区下载| 国产又大又长又粗又硬的免费视频 | 亚洲色欲啪啪久久WWW综合网| 日本免费观看网站| 日韩视频在线精品视频免费观看| 亚洲国产精品18久久久久久| youjizz亚洲| 亚洲精品白色在线发布| 亚洲国产精品自在线一区二区| 亚洲免费网站观看视频| 91精品国产免费网站| 久草免费手机视频| 国产麻豆成人传媒免费观看| 国产在线观看无码免费视频| 9久热这里只有精品免费| 一本久久A久久免费精品不卡| 亚洲欧洲日本精品| 亚洲国产午夜精品理论片| 亚洲熟妇av一区| 亚洲一区二区三区91| 亚洲av乱码一区二区三区 | 大桥未久亚洲无av码在线| 亚洲av永久无码天堂网| 男人天堂2018亚洲男人天堂| 亚洲天然素人无码专区| 亚洲gay片在线gv网站| 羞羞视频免费网站含羞草| 特级毛片爽www免费版| 中文永久免费观看网站|