遗忘海岸

江湖程序员 -Feiph(LM战士)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

JSP中的一个树型结构

看方力勋的javaWeb,采用左右值来表示树型结构(就是俺门的多级分类)
表结构

页面代码

复制代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>树状结构</title>
    <script src="${pageContext.request.contextPath }/js/xtree.js"></script>
    <link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath }/css/xtree.css">
  </head>
  
  <body>
      
      <script type="text/javascript">
          <c:forEach var="c" items="${list}">
              <c:if test="${c.depth==1}">
               var tree = new WebFXTree('${c.name}');
               tree.target="right";
               tree.action = "${pageContext.request.contextPath}/servlet/AddChildServlet?id=${c.id}";
              </c:if>
              <c:if test="${c.depth==2}">
                  var node${c.depth} = new WebFXTreeItem('${c.name}');
                  node${c.depth}.target="right";
                  node${c.depth}.action = "${pageContext.request.contextPath}/servlet/AddChildServlet?id=${c.id}";
                  tree.add(node${c.depth});
              </c:if>
              <c:if test="${c.depth>2}">
                      var node${c.depth} = new WebFXTreeItem('${c.name}');
                      node${c.depth}.target="right";
                      node${c.depth}.action = "${pageContext.request.contextPath}/servlet/AddChildServlet?id=${c.id}";
                      node${c.depth-1}.add(node${c.depth});
              </c:if>
          </c:forEach>
          
          document.write(tree);
      </script>
      
  
  </body>
</html>
View Code
复制代码

呈现后html

复制代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>树状结构</title>
    <script src="/AAPlan/js/xtree.js"></script>
    <link type="text/css" rel="stylesheet" href="/AAPlan/css/xtree.css">
  </head>
  
  <body>
      
      <script type="text/javascript">
          
              
               var tree = new WebFXTree('商品');
               tree.target="right";
               tree.action = "/AAPlan/servlet/AddChildServlet?id=1";
              
              
              
          
              
              
                  var node2 = new WebFXTreeItem('平板电视');
                  node2.target="right";
                  node2.action = "/AAPlan/servlet/AddChildServlet?id=2";
                  tree.add(node2);
              
              
          
              
              
              
                      var node3 = new WebFXTreeItem('长虹');
                      node3.target="right";
                      node3.action = "/AAPlan/servlet/AddChildServlet?id=5";
                       node2.add(node3);
              
          
              
              
              
                      var node3 = new WebFXTreeItem('索尼');
                      node3.target="right";
                      node3.action = "/AAPlan/servlet/AddChildServlet?id=6";
                       node2.add(node3);
              
          
              
              
                  var node2 = new WebFXTreeItem('冰箱');
                  node2.target="right";
                  node2.action = "/AAPlan/servlet/AddChildServlet?id=3";
                  tree.add(node2);
              
              
          
              
              
              
                      var node3 = new WebFXTreeItem('西门子');
                      node3.target="right";
                      node3.action = "/AAPlan/servlet/AddChildServlet?id=7";
                       node2.add(node3);
              
          
              
              
                  var node2 = new WebFXTreeItem('笔记本');
                  node2.target="right";
                  node2.action = "/AAPlan/servlet/AddChildServlet?id=4";
                  tree.add(node2);
              
              
          
              
              
              
                      var node3 = new WebFXTreeItem('thinkpad');
                      node3.target="right";
                      node3.action = "/AAPlan/servlet/AddChildServlet?id=8";
                       node2.add(node3);
              
          
              
              
              
                      var node3 = new WebFXTreeItem('dell');
                      node3.target="right";
                      node3.action = "/AAPlan/servlet/AddChildServlet?id=9";
                       node2.add(node3);
              
          
          
          document.write(tree);
      </script>
      
  
  </body>
</html>
View Code
复制代码

说明:
1.根据上面的数据列表可以知道,某个node节点的父节点是最近一个depth比当前节点小一的节点,通过node${c.depth-1}.add(node${c.depth})可以将当前节点添加到最近一次定义的上层节点下(也就是父节点)。

2.可以看到呈现 ,有多个var  node2=... 或 var node3=... 这样的变量重复定义,由于javascript中出现变量重复定义时,当前行javascript代码会采用最近一次变量定义的值(如果最近一次只var xx; 没有附值,那么当前代码会采用次最近一次定义的值,以此类推),所以上面代码能正常运行.

关于Xtree
var node=new WebFXTreeItem("xxx") 类,如果有调用node.add( node_sub),那么改node显示成文件夹,如果没有那么该node显示成文件

一点改进意见:
虽然上面的代码运行正常但是多个var nodex=...总让人有点意见
方法一:
        上来先来一句定义,var node1,node2...,nodex 这样下面的代码只要写node=....就好了
        当然这样页面上会有大量的node=new xxxx 样子的代码,如果   分类条目很多的话。
方法二:
         将分类数据存在成一个javascript数组,并且独立到一个servletCategory中,采用js引用方式加到页面中
         然后使用js根据数组内容构建tree并输出.
         大致的js代码是,定义一个parentNode,记录最近一次的parent节点位置,如果当前节点的level小于或等于parentNode的level,
         就从parenNode的位置往回找到最近一个level小于当前节点level的节点(Xtree的节点有parentNode属性可以获取到父节点,
          另外level 属性可以直接在节点上扩展 var tree=new WebFXTree("xxx") ; tree.level=3 
)。
         另外需要定义prevNode记录最近一个节点,当当前curLevel-ParentLevel>=2 时(进入隔代级别时),将prevNode附值给parentNode

参考:
http://www.cnblogs.com/wdfrog/archive/2008/09/26/1299549.html

posted on   遗忘海岸  阅读(5212)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
历史上的今天:
2011-06-27 Quartz.Net 1.30的一些设置说明
2008-06-27 SQL 中的单列数据到多列数据的转换,以及转换后的分组统计
2008-06-27 一个很不错的日历控件
点击右上角即可分享
微信分享提示