`
wanglihu
  • 浏览: 919798 次
  • 性别: Icon_minigender_1
  • 来自: 黑龙江
社区版块
存档分类

使用dtree构建动态树型菜单

阅读更多

dtree是一个免费的javascript脚本,只需定义有限的几个参数,就可以做出漂亮的树型菜单。下载目录:http://www.destroydrop.com/javascripts/tree/
 以下是dtree的用法示例:
 1)初始化菜单
 <script type="text/javascript">
  <!--
  var Tree = new Array;
  // nodeId | parentNodeId | nodeName | nodeUrl
  Tree[0]  = "1|0|Page 1|#";
  Tree[1]  = "2|1|Page 1.1|#";
  Tree[2]  = "3|1|Page 1.2|#";
  Tree[3]  = "4|3|Page 1.2.1|#";
  Tree[4]  = "5|1|Page 1.3|#";
  Tree[5]  = "6|2|Page 1.1.1|#";
  Tree[6]  = "7|6|Page 1.1.1.1|#";
  Tree[7]  = "8|6|Page 1.1.1.2|#";
  Tree[8]  = "9|1|Page 1.4|#";
  Tree[9]  = "10|9|Page 1.4.1|#";
  Tree[10] = "11|0|Page 2|#";
  //-->
 </script>
 2)调用函数
 <div class="tree">
  <script type="text/javascript">
  <!--
   createTree(Tree,1,7);  // starts the tree at the top and open it at node nr. 7
  //-->
  </script>
 </div>

 
2。jsp动态实现
   分以下步骤实现动态的树型菜单:
   1)在数据库建tree_info表,有nodeId,parentNodeId,nodeName,nodeUrl四个字段,来存储节点信息。
   2)编写java类,用于从数据库找出节点信息,并且生成javascript脚本。
   3)编写tag类。用于封装逻辑,简化jsp的开发。
   4)建一个web程序进行测试。
3。详细过程
   1)在数据库建表,脚本如下:
   CREATE TABLE `test`.`tree_info` (
   `node_id` INTEGER UNSIGNED NOT NULL DEFAULT -1,
   `parent_id` INTEGER UNSIGNED NOT NULL DEFAULT -1,
   `node_name` VARCHAR(45) NOT NULL,
   `ref_url` VARCHAR(45) NOT NULL,
   PRIMARY KEY(`node_id`)
 )
 我使用mysql数据库,如果脚本细节有出入,请自行修改
    按照上面的dTree示例插入数据
   2)编写TreeInfo.java,这个类用于封装节点信息
     package com.diegoyun.web.tree;
  /**
   * @author Diegoyun
   * @version 1.0
   */
  public class TreeInfo {
   private int nodeId = -1;//node id
   private int parentId = -1;//parentId
   private String nodeName = null;//node name
   private String url = null;//url references
   public int getNodeId() {
    return nodeId;
   }
   public void setNodeId(int nodeId) {
    this.nodeId = nodeId;
   }
   public int getParentId() {
    return parentId;
   }
   public void setParentId(int parentId) {
    this.parentId = parentId;
   }
   public String getNodeName() {
    return nodeName;
   }
   public void setNodeName(String nodeName) {
    this.nodeName = nodeName;
   }
   public String getUrl() {
    return url;
   }
   public void setUrl(String url) {
    this.url = url;
   }
  }
   编写TreeUtil.java,用于从数据库得到节点信息,封装到TreeInfo对象,并生成javascript脚本
   TreeUtil.java
   package com.diegoyun.web.tree;
  import java.util.Collection;
  import java.util.ArrayList;
  import java.util.Iterator;
  import java.util.List;
  import java.sql.PreparedStatement;
  import java.sql.ResultSet;
  import java.sql.Connection;
  import java.sql.DriverManager;
  /**
   * @author Diegoyun
   * @version 1.0
   */
  public class TreeUtil {
   public static List retrieveNodeInfos(){
    List coll = new ArrayList();
    String driverName = "com.mysql.jdbc.Driver";
    String host = "localhost";
    String port = ":3306";
    String serverID = "test";
    String userName = "root";
    String userPwd = "root";
    String url = "jdbc:mysql://" + host + port + "/" + serverID ;
    Connection conn = null ;
    PreparedStatement ps = null;
    ResultSet rs = null;
    try{
     Class.forName(driverName).newInstance();
     conn = DriverManager.getConnection(url , userName , userPwd);
     String sql = "select * from tree_info";
     ps = conn.prepareStatement(sql);
     rs = ps.executeQuery();
     TreeInfo info = null;
     while(rs!=null && rs.next()){
      info = new TreeInfo();
      info.setNodeId(rs.getInt(1));
      info.setParentId(rs.getInt(2));
      info.setNodeName(rs.getString(3));
      info.setUrl(rs.getString(4));
      coll.add(info);
     }
  //            if(rs!=null){
  //                rs.close();
  //                rs=null;
  //            }
  //            if(ps!=null){
  //                ps.close();
  //                ps=null;
  //            }
    }catch(Exception e){
     System.out.println(e);
    }

    return coll;
   }
   public static String createTreeInfo(List alist){
    StringBuffer contents = new StringBuffer();
    contents.append("<!--\n");
    contents.append("var Tree = new Array;");//create a array in javascript
    TreeInfo info =null;
    for(int max = alist.size(),i=0;i<max;i++){
     info = (TreeInfo)alist.get(i);
     //define elements of array
     contents.append("Tree[");
     contents.append(i);
     contents.append("]=\"");
     contents.append(info.getNodeId());
     contents.append("|");
     contents.append(info.getParentId());
     contents.append("|");
     contents.append(info.getNodeName());
     contents.append("|");
     contents.append(info.getUrl());
     contents.append("\";");
    }
    contents.append("//-->");
    return contents.toString();
   }
   public static void main(String[]args){
    List alist = TreeUtil.retrieveNodeInfos();
  //        TreeInfo info = null;
  //        for(Iterator i = c.iterator();i.hasNext();){
  //            info = (TreeInfo)i.next();
  //            System.out.println("*****" + info.getNodeName());
  //        }
    System.out.println(TreeUtil.createTreeInfo(alist));
   }
  }
 3)编写标签类
 InitTreeTag.java
 package com.diegoyun.web.taglibs;
 import com.diegoyun.web.tree.TreeUtil;
 import javax.servlet.jsp.tagext.TagSupport;
 import javax.servlet.jsp.JspException;
 import java.io.IOException;
 /**
  * @author Diegoyun
  * @version 1.0
  */
 public class InitTreeTag extends TagSupport{
  public int doEndTag() throws JspException {
   StringBuffer tree = new StringBuffer();
   tree.append("<script type=\"text/javascript\">\n");
   tree.append(TreeUtil.createTreeInfo(TreeUtil.retrieveNodeInfos()));
   tree.append("</script>\n");
   try{
    pageContext.getOut().println(tree.toString());
   }catch(IOException ioe){
    ioe.printStackTrace();
   }
   return super.doEndTag();
  }
 }
 ShowTreeTag.java : 
 package com.diegoyun.web.taglibs;
 import javax.servlet.jsp.tagext.TagSupport;
 import javax.servlet.jsp.JspException;
 import java.io.IOException;
 /**
  * @author Diegoyun
  * @version 1.0
  */
 public class ShowTreeTag extends TagSupport{
  public int doEndTag() throws JspException {
   StringBuffer buffer = showTree();
   try {
    pageContext.getOut().println(buffer.toString());
   }
   catch (IOException ioe) {
    ioe.printStackTrace();
   }
   return super.doEndTag();
  }
  private StringBuffer showTree(){
   StringBuffer sb = new StringBuffer();
   sb.append("<div class=\"tree\">\n");
   sb.append("<script type=\"text/javascript\">\n");
   sb.append("<!--\n");
   sb.append("createTree(Tree,1,7);\n");
   sb.append("//-->\n");
   sb.append("</script>\n");
   sb.append("</div>\n");
   return sb;
  }   
 }
 标签的tld如下:
 <?xml version="1.0" encoding="ISO-8859-1" ?>
 <!DOCTYPE taglib
   PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
   "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
 <taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>1.2</jsp-version>
  <short-name>tree</short-name>
  <!--initTreeTag-->
  <tag>
   <name>init</name>
   <tag-class>com.diegoyun.web.taglibs.InitTreeTag</tag-class>
   <body-content>empty</body-content>
  </tag>
  <!--ShowTreeTag-->
  <tag>
   <name>show</name>
   <tag-class>com.diegoyun.web.taglibs.ShowTreeTag</tag-class>
   <body-content>empty</body-content>
  </tag>
 </taglib>
 4)建立web过程,编写jsp进行测试。
 index.jsp如下:
 <%@ page language="java"%>
 <%@ taglib uri="/WEB-INF/tlds/tree.tld" prefix="tree"%>

 <html>
 <head>
  <title>Tree example</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <link rel="StyleSheet" href="tree.css" type="text/css">
  <script type="text/javascript" src="tree.js"></script>
  <tree:init/>
 </head>
 <body>

 <b>Tree example :</b><br /><br />
 <tree:show/>
 <br /><br />
 
 </body>
 </html>
分享到:
评论
1 楼 hcq989 2009-02-08  
createTree(Tree,1,7);
这个函数在哪定义的,无法打印树

相关推荐

    JavaScript组件dtree轻松实现树型菜单

    本文将深入探讨如何使用dtree来构建JavaScript树型菜单,并分享相关知识点。 首先,了解dtree的基本概念。dtree是一个纯JavaScript编写的组件,不需要依赖其他库如jQuery,这使得它在各种环境下都能运行良好。它的...

    在Java中构建树型菜单

    总之,在Java中构建树型菜单,结合JavaScript库如Dtree和Xtree,可以实现动态、交互性强的用户界面。通过合理的设计和优化,可以为用户提供直观且高效的导航工具,提升Web应用的整体体验。在实践中,务必关注性能和...

    JavaScript动态树型菜单(带有参数说明)

    在本案例中,我们讨论的是一款名为"dtree"的JavaScript库,它能够帮助开发者创建具有动态效果的树型菜单。下面将详细介绍这款菜单的实现原理和关键知识点。 首先,`dtree.js`是核心JavaScript文件,包含了树型菜单...

    js动态树型结构 树型菜单

    在这个场景下,"js动态树型结构 树型菜单"指的是使用JavaScript实现的可以动态加载、展示和操作的树状菜单系统。 树型结构是一种数据表示形式,由节点和边组成,每个节点可以有零个或多个子节点。在JavaScript中,...

    JSP树型菜单 DTree.zip

    《JSP树型菜单DTree深度解析》 在Web开发中,树型菜单是一种常见的界面元素,用于组织和展示层次化的数据。JSP(JavaServer Pages)中的DTree是一款高效且灵活的树型菜单实现,它结合了HTML、JavaScript以及CSS技术...

    基于Java的实例开发源码-JSP树型菜单 DTree.zip

    总的来说,这个Java JSP实例提供了构建动态树型菜单的一个完整解决方案,涵盖了前端的样式设计、API文档、示例代码以及必要的图像资源。通过学习和使用这个实例,开发者可以掌握如何在自己的Java Web应用中实现类似...

    dtree、xtree和jquery-treeview构建树型菜单

    在网页开发中,构建交互式的树型菜单是常见的需求,用于组织和展示层次结构的数据。在本主题中,我们将深入探讨“dtree”、“xtree”以及“jquery-treeview”这三个JavaScript插件,它们都是用来创建这样的菜单的...

    JSP树型菜单 DTree源代码

    4. **dtree.js**:这是DTree的核心JavaScript文件,包含了实现树型菜单功能的代码。这个文件可能包含了构造树形结构、处理用户交互、动态加载数据等功能。开发者可以通过查看源码来深入理解DTree的内部工作机制,...

    JSP树型菜单 DTree.java源码学习

    在example01.html中,你可以看到如何在JSP页面中引入DTree.js和相关的CSS样式文件(dtree.css)以构建树型菜单。dtree.css负责菜单的布局和美化,确保在不同的浏览器和设备上都能有良好的显示效果。 DTree的使用...

    基于Java的源码-JSP树型菜单 DTree.zip

    【标题解析】 "基于Java的源码-JSP树型菜单 DTree.zip" 这个标题揭示了我们正在处理一个与Java编程相关的项目,具体来说是JSP(Java ...对于希望深入理解或使用DTree树型菜单的开发者来说,这些都是不可或缺的知识。

    可刷新Js树型菜单 dTree

    总结来说,`dTree` 是一款强大的JavaScript库,适用于构建无限级、可刷新的树型菜单,其丰富的功能、良好的性能和易用性使得它在网页开发中具有广泛的应用价值。无论是在企业级项目还是个人作品中,`dTree` 都能成为...

    无限级可刷新Js树型菜单 dTree

    "无限级可刷新Js树型菜单 dTree" 是一个JavaScript库,用于在Web应用中创建能够无限层级展开和刷新的树形菜单。这个标题表明该库特别适用于那些需要展示复杂层次结构数据的场景,比如组织结构、文件系统或者导航菜单...

    基于Java的实例源码-JSP树型菜单 DTree.zip

    这个压缩包"基于Java的实例源码-JSP树型菜单 DTree.zip"包含了一个使用Java技术构建的JSP树型菜单应用。这个菜单系统被称为DTree,它在Web应用程序中常用于展示层次结构的数据,例如目录结构、组织架构或者多级分类...

    javascript树型菜单(Dtree和Xtree)

    在前端开发中,Dtree和Xtree是两种常见的JavaScript实现树型菜单的库。下面将详细介绍这两个库以及相关知识点。 1. Dtree(Dynamic Tree) Dtree是一个轻量级的JavaScript库,它提供了创建动态树形菜单的功能。这...

    JAVAscript dtree 树型菜单

    JavaScript dTree 是一个轻量级的库,用于创建具有复选框功能的交互式树形菜单。这种类型的菜单在Web应用程序中广泛使用,特别是在需要层级结构数据展示和多选操作的场景下。dTree 提供了一种高效且灵活的方式来组织...

    一个简单的JS树型菜单

    使用Dtree创建树型菜单的步骤如下: 1. **初始化HTML结构**:首先,在HTML文档中添加一个容器元素,用于存放树型菜单。可以是一个`&lt;div&gt;`标签,设置相应的ID,如`#dtree`。 2. **准备JSON数据**:定义菜单的层级...

    基于java的JSP树型菜单 DTree.zip

    其次,`api.html`通常包含的是DTree组件的API文档,为开发者提供了使用这个树型菜单的指南。在这里,开发者可以了解到如何初始化菜单、添加、删除、修改节点,以及如何响应用户的交互事件,如点击、展开、收缩等。...

    树型菜单Ajax动态载入

    在给定的"dtree"文件中,可能包含了一个实现树型菜单动态加载的JavaScript库或者示例代码。这个库可能提供了创建、操作和管理树型菜单的功能,并且集成了Ajax请求以实现动态加载。通常,这样的库会提供API接口,如...

    无限级可刷新Js树型菜单代码

    其中JavaScript部分使用了一个名为dTree的库来创建和管理树型菜单。dTree是一个轻量级的JavaScript插件,它提供了一系列API用于构建和操作树形结构的数据。 #### 2. HTML结构 HTML部分定义了页面的基本结构,包括...

    很经典的OA树型菜单源代码

    总结来说,这个“很经典的OA树型菜单源代码”包含了构建树型菜单的前端展示和交互处理。理解树型菜单的工作原理、HTML与JavaScript的结合以及相关库的使用,对于开发人员来说,是提高用户体验和优化OA系统功能的重要...

Global site tag (gtag.js) - Google Analytics