这里只介绍实现的流程及步骤,方便以后查阅,并没有考虑代码的优化及其它的方面,有兴趣的可以自己去修改!
另外,这里只是实现显示树,并没有实现节点的添加及删除,有需要的可以自己去完成!
首先,建立数据库表,treeTabel
create table treeTables
(
treeId int identity(1,1) primary key, //id标识列,自动增长
treeName varchar(20), //节点名称
parent_treeId int //父节点id
)
建立数据库的操作类,得到树的详细信息
package com.tree.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.sql.rowset.CachedRowSet;
import com.sun.rowset.CachedRowSetImpl;
public class TreeService {
private TreeService(){
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static TreeService treeService;
public static TreeService getInstance(){
if(treeService == null)
treeService = new TreeService();
return treeService;
}
public Connection getConn() throws Exception{
return DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;databasename=testDB","sa","");
}
/**
* 得到树信息
* @return
* @throws Exception
*/
public Treeinfo[] getAllTreeinfo() throws Exception{
Connection conn = getConn();
PreparedStatement smt = conn.prepareStatement("select * from treeTable where parent_treeId = -1");
CachedRowSet cs = new CachedRowSetImpl();
cs.populate(smt.executeQuery());
List<Treeinfo> treeinfoList = new ArrayList<Treeinfo>();
while(cs.next()){
Treeinfo treeinfo = new Treeinfo();
treeinfo.setTreeId(cs.getInt(1));
treeinfo.setNodeName(cs.getString(2));
treeinfo.setParentId(cs.getInt(3));
treeinfo.setChildren(getChildren(treeinfo.getTreeId()));
treeinfoList.add(treeinfo);
}
cs.close();
smt.close();
conn.close();
Treeinfo[] treeinfo = new Treeinfo[treeinfoList.size()];
treeinfo = treeinfoList.toArray(treeinfo);
return treeinfo;
}
/**
* 得到当前id的子节点信息,这里用了递归调用
* @param treeNodeId
* @return
* @throws Exception
*/
public Treeinfo[] getChildren(int treeNodeId) throws Exception{
Connection conn = getConn();
PreparedStatement smt = conn.prepareStatement("select * from treeTable where parent_treeId = ?");
smt.setInt(1, treeNodeId);
ResultSet rs = smt.executeQuery();
List<Treeinfo> childList = new ArrayList<Treeinfo>();
while(rs.next()){
Treeinfo treeinfo = new Treeinfo();
treeinfo.setTreeId(rs.getInt(1));
treeinfo.setNodeName(rs.getString(2));
treeinfo.setParentId(rs.getInt(3));
treeinfo.setChildren(getChildren(treeinfo.getTreeId()));
childList.add(treeinfo);
}
rs.close();
smt.close();
conn.close();
Treeinfo[] childResult = new Treeinfo[childList.size()];
childResult = childList.toArray(childResult);
return childResult;
}
}
建立中间层Action类
package com.tree.test;
import com.opensymphony.xwork2.ActionSupport;
public class TreeAction extends ActionSupport {
private Treeinfo root;
@Override
public String execute() throws Exception {
root = new Treeinfo();
root.setTreeId(-1);
root.setNodeName("root");
root.setChildren(TreeService.getInstance().getAllTreeinfo());
return SUCCESS;
}
public Treeinfo getRoot() {
return root;
}
public void setRoot(Treeinfo root) {
this.root = root;
}
}
最后新建显示树形菜单的jsp页面
<%@ page language="java" pageEncoding="GB18030"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'testtree.jsp' starting page</title>
<s:head theme="ajax" debug="true" />
<script language="JavaScript">
function treeNodeSelected(arg) {
alert("id["+arg.source.widgetId+"], name["+ arg.source.title+ "] selected");
}
dojo.addOnLoad(function() {
var s = dojo.widget.byId('treeTestId').selector;
dojo.event.connect(s, 'select', 'treeNodeSelected');
});
</script>
</head>
<body>
<s:tree id="treeTestId"
theme="ajax"
rootNode="root"
childCollectionProperty="children"
nodeIdProperty="treeId"
nodeTitleProperty="nodeName"
treeSelectedTopic="treeSelected">
</s:tree>
</body>
</html>
特别注意,要在页面引入 <s:head theme="ajax" debug="true" />
分享到:
相关推荐
Struts2 的使用AJAX动态从数据库获取数据生成树形菜单
Struts2动态树型从数据库取出 Struts2动态树形 其中包括 后台代码 和前台页面部分代码
树形菜单、用JS配合Struts1.2、Spring2。0、Ajax2.0的树形菜单,还包括了一个角色的添加,修改,也是相当于一个小的角色分配,希望可以帮到大家!~!
struts实现java树形菜单,用dtree实现
jsp struts hibernate JavaScript实现的无限级树形菜单实例,开发环境: Eclipse3.2.1 MyEclipse5.1 Tomcat5.5 Microsoft SQL Server 2000,页面的树形菜单的节点用 JavaScript进行控制 数据库中的商品类别表...
struts2 实现oracle数据库的增删改查
JSP树形菜单 简单的菜单 没有用数据库 用Action 跳转 和herf
struts简单示例+js树形菜单 struts简单示例+js树形菜单
基于struts hibernate 实现的无限级树形菜单,能够完成菜单的动态显示、添加、修改、删除。
struts2 树形菜单实现, 三种方法。
运用struts2技术实现简单的登录,注册程序,所用为struts2.3,服务器tomcat7.0,数据库oracle,编译器idea
单纯struts2开发实现对用户(数据库)的增删改查
struts+hibernate树形菜单
Struts2 实现动态树 结合Hebernate
Struts+Hibernate+Javascript 实现无限级树形菜单 内含step by step 开发文档 一、说明: 1、开发环境: Eclipse3.2.1+MyEclipse5.1+Tomcat5.5+Microsoft SQL Server 2000 2、主要实现技术:Struts1.2+Hibernate...
自己动手做的一个树形菜单demo,对数据库中不同层次的节点进行分类,实现起来和简单,只需要一个servlet或者struts action,然后再页面使用dtree
struts、ibatis、树形结构 组件可以用于参考相应业务的树形表达
Jsp Struts javascript树形菜单附代码,号称史上最完美的jsp版树形菜单效果,附有代码和用法说明,基于dtree内核,本过本实例现了动态的树形菜单,就是将树型菜单的节点保存在数据库表中,通过数据访问对象将其从...
Struts 2实现登陆,使用MyEclipse和SQL2000数据库
本代码可以实现无限级树形菜单,可以随着右边内容变化左边菜单自动收缩