从数据库读取数据并动态生成easyui tree构结
一、 数据库表结构
二、从后台读取数据库生成easyui tree结构的树
1、TreeNode树结点类(每个结点都包含easyui tree 的基本属性信息)
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class TreeNode implements Serializable { private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
private String text;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
private String parentid;
public String getParentid() {
return parentid;
}
public void setParentid(String parentid) {
this.parentid = parentid;
} private List<TreeNode> children = new ArrayList<TreeNode>();
public List<TreeNode> getChildren() {
return children;
}
public void setChildren(List<TreeNode> children) {
this.children = children;
} private String iconCls;
public String getIconCls() {
return iconCls;
}
public void setIconCls(String iconCls) {
this.iconCls = iconCls;
} private String state;//节点状态,'open' 或 'closed',默认:'open'。
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
} private boolean checked;
public boolean isChecked() {
return checked;
}
public void setChecked(boolean checked) {
this.checked = checked;
} private Map<String, Object> attributes = new HashMap<String, Object>();
public Map<String, Object> getAttributes() {
return attributes;
}
public void setAttributes(Map<String, Object> attributes) {
this.attributes = attributes;
} }
2、用递归方法生成easyui tree 格式的json字符串
public static TreeNode recursiveTree(String id) {
// 根据id获取节点对象(SELECT * FROM ttree t WHERE t.id=?)
TreeNode node = getTreeNode(id);
// 查询id下的所有子节点(SELECT * FROM ttree t WHERE t.parentid=?)
List<TreeNode> childTreeNodes = queryTreeNode(id);
// 遍历子节点
for (TreeNode child :childTreeNodes) {
TreeNode n = recursiveTree(child.getId()); // 递归
node.getChildren().add(n);
}
return node;
}
private static TreeNode getTreeNode(String id){
TreeNode treeNode = null;
Connection dbConn = getDbConnection();
if(dbConn != null){
try {
String strSQL = "select * from ttree where id="+id;
PreparedStatement pstmt = null;
ResultSet rs = null;
pstmt = dbConn.prepareStatement(strSQL);
rs = pstmt.executeQuery();
while (rs.next()) {
treeNode = new TreeNode();
treeNode.setId(rs.getString("id"));
treeNode.setText(rs.getString("text"));
treeNode.setParentid(rs.getString("parentid"));
Map<String, Object> attributes = new HashMap<String, Object>();
attributes.put("url",rs.getString("url"));
treeNode.setAttributes(attributes);
}
rs.close();
pstmt.close();
dbConn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return treeNode;
}
private static List<TreeNode> queryTreeNode(String id){
List<TreeNode> arrList = new ArrayList<TreeNode>();
Connection dbConn = getDbConnection();
TreeNode treeNode = null;
if(dbConn != null){
try {
String strSQL = "select * from ttree where parentid="+id;
PreparedStatement pstmt = null;
ResultSet rs = null;
pstmt = dbConn.prepareStatement(strSQL);
rs = pstmt.executeQuery();
while (rs.next()) {
treeNode = new TreeNode();
treeNode.setId(rs.getString("id"));
treeNode.setText(rs.getString("text"));
treeNode.setParentid(rs.getString("parentid"));
Map<String, Object> attributes = new HashMap<String, Object>();
attributes.put("url",rs.getString("url"));
treeNode.setAttributes(attributes);
arrList.add(treeNode);
}
rs.close();
pstmt.close();
dbConn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return arrList;
}
3、测试调用(JSON.toJSONString方法是使用的fastjson.jar包中的方法功能很强大强烈推荐,可以在网上下载)
public static void main(String[] args) {
TreeNode node = recursiveTree("1");
String jsonText = JSON.toJSONString(node, true);
System.out.println(jsonText);
}
4、输出结果
{
"attributes":{
"url":"1"
},
"checked":false,
"children":[{
"attributes":{
"url":"2"
},
"checked":false,
"children":[
{
"attributes":{
"url":"3"
},
"checked":false,
"children":[],
"id":"3",
"parentid":"2",
"text":"长沙"
},
{
"attributes":{
"url":"4"
},
"checked":false,
"children":[],
"id":"4",
"parentid":"2",
"text":"株洲"
},
{
"attributes":{
"url":"5"
},
"checked":false,
"children":[],
"id":"5",
"parentid":"2",
"text":"湘潭"
},
{
"attributes":{
"url":"6"
},
"checked":false,
"children":[
{
"attributes":{
"url":"7"
},
"checked":false,
"children":[],
"id":"7",
"parentid":"6",
"text":"岳阳县"
},
{
"attributes":{
"url":"http://192.168.1.1"
},
"checked":false,
"children":[],
"id":"8",
"parentid":"6",
"text":"华容县"
},
{
"attributes":{
"url":"9"
},
"checked":false,
"children":[],
"id":"9",
"parentid":"6",
"text":"湘阴县"
}
],
"id":"6",
"parentid":"2",
"text":"岳阳"
}
],
"id":"2",
"parentid":"1",
"text":"湖南"
}],
"id":"1",
"parentid":"0",
"text":"中国"
}
写得很简单代码不是很规范,只是个测试demo。但功能很实用,希望对做web开发同学有些帮助。
从数据库读取数据并动态生成easyui tree构结的更多相关文章
- .Net Mvc 返回Json,动态生成EasyUI Tree
最近做一个项目,开始接触EasyUI,感觉很强大,很适合我这种对前台不是很感冒的人.在学习Tree的过程中,感觉网上的资料挺乱的,很多只是把EasyUI API 抄了一遍.现在把最近这段时间的学到的, ...
- 10天学会phpWeChat——第三天:从数据库读取数据到视图
在第二天,我们创建了我们的第一个phpWeChat功能模块,但是比较简单.实际生产环境中,我们不可能有如此简单的需求.更多的情况是数据存储在MySql数据库中,我们开发功能模块的作用就是将这些数据从M ...
- echarts通过ajax向服务器发送post请求,servlet从数据库读取数据并返回前端
1.echarts的官网上的demo,都是直接写死的随机数据,没有和数据库的交互,所以就自己写了一下,ok,我们开始一步一步走一遍整个流程吧. 就以官网最简单的那个小demo来做修改吧.官网上的小de ...
- C#实现从数据库读取数据到Excel
用第三方组件:NPOI来实现 先去官网:http://npoi.codeplex.com/下载需要引入dll(可以选择.net2.0或者.net4.0的dll),然后在网站中添加引用.使用 NPOI ...
- JMeter 参数化之利用JDBCConnectionConfiguration从数据库读取数据并关联变量
参数化之利用DBC Connection Configuration从数据库读取数据并关联变量 by:授客 QQ:1033553122 1. 下载mysql jar包 下载mysql jar包 ...
- Android打开数据库读取数据
打开数据库读取数据 private MyDatabaseHelper dbHelper; dbHelper=new MyDatabaseHelper(this,"List.db", ...
- .Net MVC 动态生成LayUI tree
.Net MVC 动态生成LayUI tree 最近在做项目的过程中需要用到Tree插件,所以找了一堆Tree发现LayUI的Tree样式比较好看,所以开始搞! 1.Layui部分 1.1 首先引用文 ...
- silverlight 从数据库获取到数据,动态生成XMLWEN文件,并获取文件进行操作
// Silverlight中的独立存储是其内部的可信任的可访问文件空间,在这里你可以使用Silverlight随意的创建.读取.写入.删除目录和文件,它有一些类似于Cookie,但是它可以在客户端保 ...
- Hibernate上传数据到数据库,从数据库读取数据到本地模板代码
1.Hibernate上传数据到数据库: //创建一个session对象 Session session1=HibernateTools.getSession(); //Fenciresult数据库表 ...
随机推荐
- 漫谈程序员(十二)IT程序猿之猿体是革命的本钱
IT程序猿之猿体是革命的本钱 前言 程序猿的一大特点就是加班.加班.不停地加班.... 为了美好的生活,为了生活的更加美好.我们选择勤勤恳恳,踏踏实实. 但是,工作只是生活的一部分.生命中最重要的莫过 ...
- Redis简介 Linux安装Redis Redis使用
其他一些操作(包括 APPEND.GETRANGE.MSET 和 STRLENGTH 也可用于字符串.请参见http://doc.redisfans.com/string/index.html ) 使 ...
- Android开发你不知道的TIPS
1.Space space是Android 4.0中新增的一个控件,它实际上可以用来分隔不同的控件,其中形成一个空白的区域.这是一个轻量级的视图组件,它可以跳过Draw,对于需要占位符的任何场景来说都 ...
- 【翻译】在Ext JS集成第三方库
原文地址:http://www.sencha.com/blog/integrating-ext-js-with-3rd-party-libraries/ 作者:Kevin Kazmierczak Ke ...
- 关于iOS中几种第三方对XML/JSON数据解析的使用
Json XML 大数据时代,我们需要从网络中获取海量的新鲜的各种信息,就不免要跟着两个家伙打交道,这是两种结构化的数据交换格式.一般来讲,我们会从网络获取XML或者Json格式的数据,这些数据有着特 ...
- Android绘图机制(四)——使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美
Android绘图机制(四)--使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美 这里为什么不继续把自定义View写下去呢,因为最近项目 ...
- mybatis --- 以接口的方式进行编程
); 我们来学习下接口方式的编程. 接口类IBookDao.java package com.mybatis.dao; import com.mybatis.model.Book; public i ...
- obj-c编程07:异常处理
好了,到了相对轻松的话题,也是所有语言无可避免的话题:异常的处理. 我们知道对于一些常见的语言,"异常"是逃不开避不掉的主题:C中相对原始的signal或依赖系统异常支持(比如wi ...
- 和菜鸟一起学linux之DBUS基础学习记录
D-Bus三层架构 D-Bus是一个为应用程序间通信的消息总线系统, 用于进程之间的通信.它是个3层架构的IPC 系统,包括: 1.函数库libdbus ,用于两个应用程序互相联系和交互消息. 2.一 ...
- 【省带宽、压成本专题】深入解析 H.265 编码模式,带你了解 Apple 全面推进 H.265 的原因
过去几年,又拍云一直在点播.直播等视频应用方面潜心钻研,取得了不俗的成果.我们结合点播.直播.短视频等业务中的用户场景,推出了"省带宽.压成本"系列文章,从编码技术.网络架构等角度 ...