<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 閱讀(2545) 評論(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,沒看出遞歸的代碼。不明白,學習中。。。  回復  更多評論   


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


    網站導航:
     
    主站蜘蛛池模板: 四虎国产精品永免费| 四虎影视在线影院在线观看免费视频| 2020因为爱你带字幕免费观看全集 | 亚洲不卡1卡2卡三卡2021麻豆| 十八禁视频在线观看免费无码无遮挡骂过 | 永久免费看bbb| 亚洲AV无码资源在线观看| 最新亚洲成av人免费看| 亚洲男人的天堂www| 色综合久久精品亚洲国产| 免费观看的a级毛片的网站| 亚洲中文无码亚洲人成影院| 中文毛片无遮挡高清免费| 亚洲最大AV网站在线观看| 中国内地毛片免费高清| 亚洲av午夜成人片精品网站| 免费人成大片在线观看播放| 性短视频在线观看免费不卡流畅| 亚洲人成电影在线观看青青| 嫩草在线视频www免费观看| 四虎永久免费观看| 国产 亚洲 中文在线 字幕| 精品国产免费观看一区| 免费毛片毛片网址| 亚洲成人免费在线| 国产线视频精品免费观看视频| 亚洲国产精品无码久久一线| 无码国产精品一区二区免费| 国产亚洲精彩视频| 日本黄页网站免费| 国产精品黄页免费高清在线观看| 亚洲AV无码乱码在线观看裸奔| 日本妇人成熟免费中文字幕| 高h视频在线免费观看| 四只虎免费永久观看| 久久性生大片免费观看性| 国产亚洲美日韩AV中文字幕无码成人 | 亚洲AV电影院在线观看| 全免费A级毛片免费看网站| 一级特黄录像视频免费 | 国产亚洲国产bv网站在线|