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


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


          網站導航:
           
          主站蜘蛛池模板: 靖江市| 新津县| 德江县| 仁布县| 东方市| 平罗县| 儋州市| 普洱| 兴隆县| 广昌县| 嘉鱼县| 孝昌县| 金溪县| 郑州市| 南康市| 云和县| 黄山市| 延津县| 蒲江县| 天柱县| 石城县| 凤山市| 正宁县| 连平县| 嵊州市| 福贡县| 连江县| 岚皋县| 仪征市| 禄丰县| 宣武区| 文登市| 平利县| 井陉县| 徐闻县| 合阳县| 延庆县| 兴海县| 翼城县| 浦县| 沅陵县|