<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://m.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++博客   博問  
     
    主站蜘蛛池模板: 免费做爰猛烈吃奶摸视频在线观看| AAAAA级少妇高潮大片免费看| 99精品热线在线观看免费视频| 亚洲国产一区视频| 苍井空亚洲精品AA片在线播放| 成人免费看吃奶视频网站| 亚洲国产精品白丝在线观看| 十九岁在线观看免费完整版电影| 亚洲Av综合色区无码专区桃色| 亚洲免费观看视频| 久久久综合亚洲色一区二区三区| 免费精品久久天干天干| 亚洲成AV人片在| 精品一区二区三区无码免费视频| 亚洲第一区视频在线观看| 国产a视频精品免费观看| 亚洲乱码中文字幕小综合| 在线观看成人免费| 噜噜综合亚洲AV中文无码| 免费人成在线观看网站视频| a级毛片免费网站| 亚洲成av人片天堂网| 2021在线观看视频精品免费| 亚洲夂夂婷婷色拍WW47| 国产亚洲福利一区二区免费看| 人成电影网在线观看免费| 国产国拍亚洲精品mv在线观看| 777爽死你无码免费看一二区| 亚洲sss综合天堂久久久| 免费在线观看的黄色网址| 波霸在线精品视频免费观看| 亚洲成人动漫在线| 大地资源免费更新在线播放| 日韩毛片一区视频免费| 亚洲AV综合色区无码一区| 成人免费AA片在线观看| 视频一区二区三区免费观看| 亚洲国产精品第一区二区 | 大地资源在线资源免费观看| 久久久久久亚洲精品成人| 在线a毛片免费视频观看|