这里只介绍实现的流程及步骤,方便以后查阅,并没有考虑代码的优化及其它的方面,有兴趣的可以自己去修改!
另外,这里只是实现显示树,并没有实现节点的添加及删除,有需要的可以自己去完成!
首先,建立数据库表,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技术动态地从数据库中获取数据,并生成交互式的树形菜单。树形菜单在Web应用中常见于导航系统,因为它能清晰地展示层次结构,方便用户浏览和操作。 首先,让我们...
在IT行业中,树形菜单是一种常见的用户界面元素,尤其在数据管理和导航系统中...以上就是关于给定标题和描述中的关键知识点的详细说明,涵盖了树形菜单的原理、Java实现、数据库表的使用以及Struts框架的应用等方面。
在Struts中,我们将利用ActionForm作为数据传输对象(DTO),将从数据库获取的树形菜单数据传递到前端。以下是如何实现这个过程的步骤: 1. **数据库设计**: - 创建一个名为`functions`的表,用于存储树形菜单的...
开发者可以使用Freemarker语法定义动态内容,如树形菜单的数据,这些数据由后端Spring或Struts2处理并传递给前端。 然后是“jquery”,这是一个广泛使用的JavaScript库,提供了丰富的API用于操作DOM(文档对象模型...
这个“struts hibernate dwr无限级树形菜单”项目是将这些技术结合在一起,以实现一个动态、可扩展的菜单系统。 Struts 是一个MVC(Model-View-Controller)框架,它提供了结构化的控制层来处理用户请求,管理业务...
本文详细介绍了在Struts2框架中实现树形菜单的三种方法:直接使用Struts2内置的`<s:tree>`标签、自定义节点类以及从数据库获取数据并转换为树形结构。每种方法都有其适用场景,开发者可以根据具体需求选择合适的方法...
6. **文档`Struts+hibernate树形菜单.doc`**: 这个文档很可能包含了项目的详细步骤、配置说明、代码示例和使用指南。通过阅读这份文档,可以更深入地理解项目的实现过程和具体细节。 7. **资源文件`Tree`**: ...
4. **Struts动作处理**:在Struts的Action类中,调用服务层的方法获取树形菜单数据,并将其放入值栈(Value Stack),供视图层使用。 5. **视图渲染**:使用JSP或Freemarker等模板技术,在页面上渲染树形菜单。可以...
在这个“jsp树形菜单 dtree tree 树形菜单”的项目中,我们将探讨如何利用JSP、dtree库以及可能的Struts框架来创建一个动态的树形菜单。 首先,JSP(JavaServer Pages)是一种基于Java的技术,用于创建动态Web内容...
### 基于Struts与jQuery实现的动态加载树形菜单技术详解 #### 一、概述 本篇文章将深入探讨如何使用Struts框架结合jQuery来实现一个动态加载的树形菜单功能。该功能的主要特点是可以根据不同的场景需求,实现菜单...
JSP树形菜单 简单的菜单 没有用数据库 用Action 跳转 和herf
在描述中提到的树形菜单,很可能是在Struts2的Action中处理数据,并返回到前端。 **Spring** 是一个全面的后端应用管理框架,它不仅提供了依赖注入(DI)和面向切面编程(AOP)的能力,还包含了事务管理、数据源...
在IT行业中,构建一个树形菜单是常见的需求,特别是在Web应用程序中,用于组织和展示层级结构的数据。这里我们将深入探讨如何使用Eclipse、Struts和Hibernate这三个流行的技术框架来实现这样的功能。 首先,Eclipse...
在树形菜单的实现中,Struts2接收用户的操作请求,并调用相应的业务逻辑。 **Hibernate** 是一个强大的ORM(对象关系映射)框架,可以将Java对象与数据库表进行映射,简化数据库操作。在本项目中,Hibernate将用于...
将两者结合,开发者可以构建服务器端动态生成的树形菜单,利用Hibernate从数据库中获取数据,然后在Struts的视图层以树形结构呈现,使得后台数据的管理更加灵活。 4. **treeview**:TreeView是另一种常见的...
树形结构在很多场景下都是非常有用的,比如数据展示、导航菜单等,因此掌握Struts2中如何构建和操作树形结构是提升开发效率的关键。 首先,理解树形结构的基本概念是必要的。树形结构是一种数据结构,它由节点(或...
本篇文章将深入探讨如何利用`dTree`来生成动态的树形菜单,并结合后台Action中的List数据进行操作。 首先,我们需要理解`dTree`的基本概念。`dTree`是一个基于JavaScript的开源库,它提供了一种简单的方式来创建...
5. **dTree插件**:dTree是一款基于JavaScript的可折叠树形菜单组件,用于在网页上显示层次结构的数据。在本项目中,前端可能利用dTree来展示从服务器获取的JSON数据,实现动态的、可交互的无限级联树视图。 6. **...
在Struts2中集成EXT框架可以创建更丰富的用户界面,包括动态的树形菜单。EXT框架是一个JavaScript库,它提供了丰富的组件和布局,用于构建交互式的Web应用程序。 在"struts2中用ext框架显示树(tree)形菜单"这个...
本项目结合Struts和jQuery,实现了动态加载和拖拽功能的树形结构,具有简单实用和易于扩展的特点。 **1. 动态加载** 动态加载是指在用户需要时才从服务器获取数据并显示在树形结构中,而不是一次性加载所有数据。...