最近需要用到EASYUI中的TREE功能,以前我是直接拼接成<UL><LI>发现这样拼完之后在更改树后对树的刷新不是很理想,现改用JSON格式,首先分析TREE中JOSN格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[{
    "id":1,
    "text":"流程分类",
    "children":[{
        "id":11,
        "text":"门禁流程分类",
        "checked":true
    },{
        "id":113,
        "text":"子门禁流程分类",
        "children":[{
            "id":1131,
            "text":"子子门禁流程分类"
        },{
            "id": 8,
            "text":"Async Folder",
            "state":"closed"
        }]
    }]
},{
    "id":3
    "text":"行政",
    "children":[{
        "id":"31",
        "text":"加班"
    },{
        "id":"33",
        "text":"请假"
    }]
}]

可以看出这种模式是由三个属性所组成,ID TEXT 集合,根据分析 我们需要对此模式建立一个BEAN的结构模型,建立TREENODE:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
packagecom.odbpo.beans;
 
importjava.util.List;
 
publicclassTreeNode {
 
    privateintid;
 
    privateString text;
     
    privateintpid;
 
    privateList<TreeNode> children;
 
    publicintgetPid() {
        returnpid;
    }
 
    publicvoidsetPid(intpid) {
        this.pid = pid;
    }
 
    publicintgetId() {
        returnid;
    }
 
    publicvoidsetId(intid) {
        this.id = id;
    }
 
    publicString getText() {
        returntext;
    }
 
    publicvoidsetText(String text) {
        this.text = text;
    }
 
    publicList<TreeNode> getChildren() {
        returnchildren;
    }
 
    publicvoidsetChildren(List<TreeNode> children) {
        this.children = children;
    }
}

BEAN构建完成,那么接下来分析如何往BEAN里传数据,首先分析 数据库表中结构

1
2
3
4
5
createtabledepatment(
id,--当前ID
pid,--父ID
name--显示名称
)

接下来我们要建立一个COM.UTIL包,所递归方法放置在这个包下,以便后续多次调用方便

建立类名为:JSONFACTORY

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*
     * 以对象形式传回前台
     */
    publicstaticList<TreeNode> buildtree(List<TreeNode> nodes,intid){
        List<TreeNode> treeNodes=newArrayList<TreeNode>();
        for(TreeNode treeNode : nodes) {
            TreeNode node=newTreeNode();
            node.setId(treeNode.getId());
            node.setText(treeNode.getText());
            if(id==treeNode.getPid()){
                node.setChildren(buildtree(nodes, node.getId()));
                treeNodes.add(node);
            }
             
        }
        returntreeNodes;
    }
    

完成以上工作后我们就要在控制器中使用在DAO中建立好的查询方法,这里DAO中写法就不细说了;

控制器写法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@RequestMapping("/flow_tree")
@ResponseBody
publicList<TreeNode> getTree(){
    List<TreeNode> nodes=newArrayList<TreeNode>();
    List<FlowSortTable> list_all=flowSortTableServiceImpl.findAll();
    for(FlowSortTable flowSortTable : list_all) {
        TreeNode treeNode=newTreeNode();
        treeNode.setId(flowSortTable.getSortId());
        treeNode.setPid(flowSortTable.getSortPartmentId());
        treeNode.setText(flowSortTable.getSortName());
        nodes.add(treeNode);
    }
    List<TreeNode> treeNodes=JsonTreeFactory.buildtree(nodes,0);
    returntreeNodes;
}

以上工作结束,我们就可以在前台使用EASYUITREE模式了

将此代码 放在$(document).ready(function(){})中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$("#tt1").tree({
            url:'${contextPath}/main/flow/flow_tree.html',
            onClick:function(node){
                $("#sort").css("display","block");
                $("#save").hide();
                $("#update").show();
                odbpo_combobox("#flowType",'${contextPath}/main/flow/flowSelect.html',"flowId","flowName");
                varpnode=$(this).tree('getParent',node.target);
                $("#flowType").combobox('setValue', pnode.id);
                $("#node_id").val(node.id);
                $("#node_text").val(node.text);
                console.debug(node.id);
                console.debug(node.text);          
            }
        })

HTML构建:

1
2
3
<ulid="tt1">
             
        </ul>

启动TOMCAT预览就可以看到一个树形图的效果了!

关注公众号,分享干货,讨论技术

EasyUI Tree递归方式获取JSON的更多相关文章

  1. MVC4中EasyUI Tree异步加载JSON数据生成树

      1,首先构造tree接受的格式化数据结构MODEL /// <summary> /// 定义EasyUI树的相关数据,方便控制器生成Json数据进行传递 /// </summar ...

  2. 用递归方式在JSON中查找对象

    Json文件例子: { "type": "Update", "data": { "temp": "v" ...

  3. 树状sql--采用递归方式获取节点

    创建数据库 create table City(id varchar(3) primary key , pid varchar(3) , name varchar(10)) 插入数据 insert i ...

  4. jQuery AJAX获取JSON数据解析多种方式示例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. J2EE Web开发入门—通过action是以传统方式返回JSON数据

    关键字:maven.m2eclipse.JSON.Struts2.Log4j2.tomcat.jdk7.Config Browser Plugin Created by Bob 20131031 l ...

  6. AngularJS学习笔记(3)——通过Ajax获取JSON数据

    通过Ajax获取JSON数据 以我之前写的与用户交互的动态清单列表为例,使用JSON前todo.html代码如下: <!DOCTYPE html> <html ng-app=&quo ...

  7. C++通过HTTP请求Get或Post方式请求Json数据(转)

    原文网址:https://www.cnblogs.com/shike8080/articles/6549339.html #pragma once#include <iostream>#i ...

  8. ajax获取json数据为undefined--原因解析

    解决办法:var dataObj=eval("("+data+")");//转换为json对象 问题: 1. 碰到一个问题ajax成功获取json数据后,取值显 ...

  9. [转]easyui tree 模仿ztree 使用扁平化加载json

    原文地址:http://my.oschina.net/acitiviti/blog/349377 参考文章:http://www.jeasyuicn.com/demo/treeloadfilter.h ...

随机推荐

  1. opencv-学习笔记(1)常用函数和方法。

    opencv-学习笔记(1)常用函数和方法. cv2.imread(filename,falg) filename是文件名字 flag是读入的方式 cv2.MREAD_UNCHANGED :不进行转化 ...

  2. nordic mesh中的消息缓存实现

    nordic mesh中的消息缓存实现 代码文件msg_cache.h.msg_cache.c. 接口定义 头文件中定义了四个接口,供mesh协议栈调用,四个接口如下所示,接口的实现代码在msg_ca ...

  3. qt qchart缩放后坐标轴间隔取整

    使用qt的qchart显示数据曲线,坐标轴QValueAxis可以设置刻度间隔数量,但每个刻度的数值是根据坐标的极值除以间隔数量得到的,不一定是整数,导致曲线控件的显示刻度不适合观察. 如图: 纵坐标 ...

  4. Java动态代码模式

    java动态代理(JDK和cglib) JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委 ...

  5. Spring Security 快速了解

    在Spring Security之前 我曾经使用 Interceptor 实现了一个简单网站Demo的登录拦截和Session处理工作,虽然能够实现相应的功能,但是无疑Spring Security提 ...

  6. Mininet实验 MAC地址学习

    实验目的 了解交换机的MAC地址学习过程. 了解交换机对已知单播.未知单播和广播帧的转发方式. 实验原理 MAC(media access control,介质访问控制)地址是识别LAN节点的标识.M ...

  7. iOS- 无处不在,详解iOS集成第三方登录(SSO授权登录<无需密码>)

    1.前言   不多说,第三登录无处不在!必备技能,今天以新浪微博为例. 这是上次写的iOS第三方社交分享:http://www.cnblogs.com/qingche/p/3727559.html 可 ...

  8. python学习第二天-基本数据类型常用方法

    1.直入主题 python中基本的数据类型有 数字(整形,长整形,浮点型,复数) 字符串 字节串:在介绍字符编码时介绍字节bytes类型 列表 元组 字典 集合 下面我们直接将以下面几个点进行学习 # ...

  9. ubuntu软件管理apt与dpkg

    目前ubuntu系统主要有dpkg和apt两种软件管理方式两种区别如下 1.dpkg是用来安装.deb文件,但不会解决模块的依赖关系,且不会关心ubuntu的软件仓库内的软件,可以用于安装本地的deb ...

  10. EJB介绍

    EJB定义: 被称为java企业bean,服务器端组件,核心应用是部署分布式应用程序.用它部署的系统不限定平台.实际上EJB是一种产品,描述了应用组件要解决的标准. 标准: 可扩展 (Scalable ...