`
落花虽有意
  • 浏览: 185281 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

dTree 动态生成树

阅读更多

dTree 主页:http://destroydrop.com/javascripts/tree/

 

dTree是个很方便在页面生成树的 js 控件,如果你下载了,我猜里在几分钟之内便能在页面上显示出一颗树来。

它本身给的例子是通过一些静态数据构造树,下面我说一种通过查询的数据动态构造树的方法。

例子里没有真实的数据库操作,而是用一个模拟的数据库操作类替代。

 

在该例子中为了简便和理解没有分为过多的层,仅有 页面显示层 和 模拟的 数据库层。

最后对页面上有逻辑代码的问题作了下改进。

 

首先看看model 类,如下:

public class Node {
	
	private int id;
	private String name;
	private int pId;
	
	public Node(){}
	
	public Node(int id, String name, int pId){
		this.id = id;
		this.name = name;
		this.pId = pId;
	}
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getPId() {
		return pId;
	}
	public void setPId(int id) {
		pId = id;
	}
}

 model 类很简单,并且只包含了构造一个树必要的几个属性,结点id,结点名字和结点父id。

 

下面再来看下上面 model 的 数据库操作类,里面构造了一些数据,并有一些得到数据的方法,如下:

public class NodeDb {
	
	private static List<Node> treeList;
	
	static{
		treeList = new ArrayList<Node>();
		
		Node n = new Node(0,"Book",-1);
		treeList.add(n);
		n = new Node(1,"Computer",0);
		treeList.add(n);
		n = new Node(2,"Java",1);
		treeList.add(n);
		n = new Node(3,"C#",1);
		treeList.add(n);
		n = new Node(4,"Php",1);
		treeList.add(n);
		n = new Node(5,"Thinking in Java",2);
		treeList.add(n);
		n = new Node(6,"Java Core",2);
		treeList.add(n);
		n = new Node(7,"Thinking in C#",3);
		treeList.add(n);
		n = new Node(8,"C# Core",3);
		treeList.add(n);
		n = new Node(9,"Thinking in Php",4);
		treeList.add(n);
		n = new Node(10,"Php Core",4);
		treeList.add(n);
	}
	
	public List<Node> getNodes(){
		return treeList;
	}
	
}
 

然后再看下页面,

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="dtree.model.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">


<%@page import="dtree.db.NodeDb"%>
<%@page import="java.util.Iterator"%><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Show Tree</title>
<link rel="StyleSheet" type="text/css" href="dtree.css" />
<script type="text/javascript" src="dtree.js"></script>
</head>
<body>
<%
NodeDb ndDb = new NodeDb();
Iterator<Node> treeIt = ndDb.getNodes().iterator();
StringBuffer sbf = new StringBuffer();
// 定义js树对象
sbf.append("dtree = new dTree(\"dtree\");");
while(treeIt.hasNext()){
	Node nd = treeIt.next();
	// 增加 js树结点
	sbf.append("dtree.add("+nd.getId()+","+nd.getPId()+",\""+nd.getName()+"\");");
}
// 输出js树
sbf.append("document.write(dtree);");
%>

<script type="text/javascript">
// 执行生成的js字符串
eval('<%=sbf.toString()%>');
</script>

</body>
</html>
 

就这样几步,我们并能通过从(模拟)数据库里取出的数据动态的在页面上生成我们的树,如下显示:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

到此为止,一个完整的树已经建立完成,可以看到这个过程非常简单。

但上面的页面代码中有个问题,就是包含了大量的逻辑代码,为了减少这些代码以让页面代码更象“页面代码”,将上面的例子作如下改变:

首先,我们在 数据库操作类里新增一个方法,很显然该方法便是用来生成 js 字符串的,如下:

	// 返回定义且生成页面树的 js 字符串
	public String getJSTreeString(){
		Iterator<Node> treeIt = getNodes().iterator();
		StringBuffer sbf = new StringBuffer();
		// 定义js树对象
		sbf.append("dtree = new dTree(\"dtree\");");
		while(treeIt.hasNext()){
			Node nd = treeIt.next();
			// 增加 js树结点
			sbf.append("dtree.add("+nd.getId()+","+nd.getPId()+",\""+nd.getName()+"\");");
		}
		// 输出js树
		sbf.append("document.write(dtree);");
		
		return sbf.toString();
	}

 

然后再看看这次少得可怜的页面代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="dtree.db.NodeDb"%><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Show Tree</title>
<link rel="StyleSheet" type="text/css" href="dtree.css" />
<script type="text/javascript" src="dtree.js"></script>
</head>
<body>

<script type="text/javascript">
eval('<%=new NodeDb().getJSTreeString()%>');
</script>

</body>
</html>
 

这样改后,运行效果与前面完全一样。

 

上面的例子是对一个具体的业务生成的一颗树,如果我们的 model 改变,则需要完全再重写生成树的代码,所以可以考虑利用反射机制写一个通用的生成树的类,不过有没有这个必要也不好说,因为一个项目应该也不会有很多颗树,而且不用反射来的更快些。

 

其实生成一颗符合需求的树远远没有上面那么简单,不过 dTree 也能做出功能很强大的树来,这需要在构造结点时添加更多需要的属性,其实方法与上面还是一样,参考文档即可。

 

如果有其他方法请与我分享,谢谢。

 

8
2
分享到:
评论
1 楼 zfyfranky 2009-09-22  
别加动态两字

相关推荐

    dtree动态生成树

    在IT行业中,动态生成树(dtree)是一种常见的数据可视化技术,主要用于展示层次结构的数据,例如文件系统、组织架构或决策树等。JQuery是一个广泛使用的JavaScript库,它提供了丰富的功能来增强网页交互性。dtree是...

    dtree+jquery动态生成树

    【dtree+jquery动态生成树】是一个用于创建交互式树形结构的JavaScript库,结合了jQuery框架的强大功能,使得在网页上动态展示层次结构数据变得简单。本实例着重于实现菜单树的生成,这对于构建多级导航系统尤其有用...

    dtreeJQuery实例.动态生成树

    以上就是关于dtree jQuery实例动态生成树的知识点概述,包括其核心原理、API使用、动态加载、自定义样式、事件处理、实例化配置以及集成优化等方面。在实际开发中,根据项目需求,灵活运用这些知识可以构建出高效、...

    Dtree+Jquery动态生成树节点

    在IT领域,动态生成树节点是一项常见的需求,特别是在构建用户...动态生成树.rar"可能是实际的代码示例,"dtree参数说明..rar"则可能包含了DTree各种参数的详细解释,这些资源对于理解和应用DTree都是非常有价值的。

    dTree 生成无限级树形菜单

    在生成树形菜单的过程中,首先需要确保在前端页面引入`dTree`的脚本文件。这通常通过HTML的`&lt;script&gt;`标签完成,将`dTree.js`文件链接到你的HTML文档中。例如: ```html &lt;script src="path/to/dTree.js"&gt; ``` 接着...

    jsp+dtree+taglib 动态生成树节点

    本项目结合了JSP(JavaServer Pages)、dTree(一个JavaScript实现的树形菜单库)以及Taglib(自定义标签库),提供了一种高效的方法来实现在服务器端动态生成树结构并传递到客户端展示。 首先,JSP是Java的一种...

    Dtree+Jquery动态生成树节点.

    标题提到的"Dtree+Jquery动态生成树节点"是指使用DTree插件结合jQuery库来创建可交互的、动态更新的树形结构数据展示。这篇博文链接指向的是张荣(zhangrong108)在ITEYE上的博客文章,虽然具体的描述是空的,但我们...

    JSP动态生成树DTREE

    **JSP动态生成树DTREE详解** 在Web开发中,数据可视化是不可或缺的一部分,而树形结构作为一种常见的数据展示方式,常用于展示层次关系或分类信息。本篇将深入讲解如何利用JavaServer Pages (JSP) 技术,结合DTREE...

    从数据库动态生成树形菜单的JSP实现,使用dtree

    使用dtree插件生成动态树 1,从动态树的要求我们要从数据库生成 d = new dTree('d'); d.add(1,0,'云南电信'); d.add(11,1,'省公司本部'); d.add(12,1,'昆明分公司'); d.add(121,12,'公司领导'); d.add(122,12,'...

    dtree_JQuery实例.动态生成树

    动态生成树”这个项目是一个很好的学习资源,它展示了如何使用jQuery和dtree插件来创建具有动态加载和交互功能的树形结构。通过这个实例,开发者可以深入了解如何将静态HTML转化为生动的、响应式的用户界面元素,这...

    dtree写的动态树形菜单

    动态生成树形菜单的关键在于权限控制。当用户登录后,可以根据其角色和权限从服务器获取相应的菜单结构。这通常通过Ajax异步请求实现,请求返回的数据结构与前面示例类似,然后更新已有的dtree实例即可: ```...

    dtree+jquery动态树的生成(二)

    结合dtree和jQuery,我们可以实现后台动态生成树结构的数据,然后通过Ajax请求传递到前端展示。 具体步骤如下: 1. **数据库设计**:在Oracle数据库中,我们需要创建一个或多个表来存储树结构的数据,如id、父id、...

    dtree动态树+Javascript右键菜单

    【dtree动态树】是一种基于JavaScript的客户端树形控件,用于在网页中展示层级结构的数据,例如网站导航、文件目录等。它允许用户通过展开和折叠节点来探索信息。dtree控件提供了丰富的交互性,包括点击节点、展开/...

    dtree实现的树支持多选

    在实际应用中,JSP(JavaServer Pages)也可能参与到DTree的实现中,负责服务器端的数据处理和动态生成HTML。JSP与JavaScript结合,可以实现服务器与客户端的交互,提供更强大的功能,如动态加载数据、权限控制等。...

    dtree树形菜单(有带checkbox实现)

    有静态树形菜单和动态(从数据库获取数据)树形菜单展示两种 数据库连接采用简单的类实现 数据位MySQL(5.0.21),数据库创建脚本为dtree.sql 菜单既有普通的树结构展示,也有方便做权限等功能的带选择框的展示(含带...

    超简单超强大的动态生成树

    本人最近自己写了一个利用dTree动态生成一棵或者多棵树型导航,涉及到的知识点也是非常简单的,但是功能很强大,一看代码就知道了,理论上可以无限生成树分枝,由于没附上数据库表,所以我只是在servlet里模拟了一个数据库...

    DTree动态jsp实现

    在JSP(JavaServer Pages)环境中,DTree可以帮助开发者创建交互式的、动态更新的目录树或者菜单系统。JSP是Java的一种服务器端脚本语言,它允许将HTML代码和Java代码结合在一起,为Web应用程序提供动态内容。 在...

    dTree生成的树形菜单

    function dTree(objName) { this.config = { target : null, folderLinks : true, useSelection : true, useCookies : true, useLines : true, useIcons : true, ...

Global site tag (gtag.js) - Google Analytics