前篇文章简单介绍了静态生成树,这篇文章将通过后台把数据通过json形式传到前台,进行动态生成树。

本篇的程序所用框架为Spring MVC,可以很方便的通过controller层传json到前台。

前端jsp页面部分代码:

        $.get("${ctx}/tree/treeList",function(data){
tree(data);
});
function tree(data){
//树形菜单
$('#tree')
.on("changed.jstree", function (e, data) {
alert(data);
}).jstree({'core' : {'data' : data} });
}

controller层部分代码如下:

@Resource
    private ITreeService<TreeVo> treeService;

    @RequestMapping(value = "/treeList")
@ResponseBody
public List<TreeVo> treeList(HttpServletRequest req, Map<String, Object> rep) {
List<TreeVo> treeList=treeService.getTree();
return treeList;
}

model层TreeVo代码如下:

public class TreeVo {
private Long id; //保存该节点ID
private String parent; //保存父节点ID
private String text; //保存名称(因jstree识别text,故该属性设为为text,而非name)
// private List<Tree> children;
……
…… (get set方法)
……
}

service 层代码如下:

本节只简单介绍如何处理数据。
举例从数据库获取的数据类型如下:
id   path    name
1   1.1      top1 
2   1.1.1   top11
3   1.1.2   top12
4    1.2     top2
通过程序把其转化为
id:1  parent:#    text:top1
id:2  parent:1    text:top11
id:3  parent:1    text:top12
id:4  parent:#    text:top2
protected void getTree(List<Entity> list, List<TreeVo> treeList) {
for (Entity dep : list) {
if (dep.getPath().substring(0, dep.getPath().lastIndexOf(".")).equals("1")) {
TreeVo tvo = new TreeVo();
tvo.setId(dep.getId());
tvo.setParent("#");
tvo.setText(dep.getName());
getChildPath(list, dep, treeList);
treeList.add(tvo);
}
}
} private void getChildPath(List<Entity> list, Entity parent, List<TreeVo> treeList) {
for (Entity dep : list) {
if (!dep.getPath().equals(parent.getPath()) && dep.getPath().substring(0, dep.getPath().lastIndexOf(".")).equals(parent.getPath())) {
TreeVo tvo = new TreeVo();
tvo.setId(dep.getId());
tvo.setText(dep.getName());
tvo.setParent(parent.getId().toString());
getChildPath(list, dep, treeList);
treeList.add(tvo);
}
}
}

都于使用Spring MVC 中的 @ResponseBody 传递json,若程序一切逻辑正常,却无法把json传至前台。可进行其下两步操作:

1. 查看配置文件是否正确,spring-mvc.xml 中部分代码如下:

    <mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<!-- 将StringHttpMessageConverter的默认编码设为UTF-8 -->
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8" />
</bean>
<!-- 将Jackson2HttpMessageConverter的默认格式化输出设为true -->
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="prettyPrint" value="true"/>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>

2.查看是否引入jackson等相应jar包。

jstree动态生成树的更多相关文章

  1. jstree静态生成树并为树添加触发事件

    本章将介绍如何简单的使用jstree生成树(生成树的数据是静态的),并为树添加点击事件. 1. 建一个jsp页面,引入jquery.js(在其他js前引用),引入jstree所需的js,css文件(可 ...

  2. 使用jsTree动态加载节点

    因为项目的需要,需要做一个树状菜单,并且节点是动态加载的,也就是只要点击父节点,就会加载该节点下的子节点. 大致的效果实现如下图: 以上的实现就是通过jsTree实现的,一个基于JQuery的树状菜单 ...

  3. jsTree动态加载数据

    Views代码 @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="view ...

  4. dTree 动态生成树

    http://luohua.iteye.com/blog/451453 dTree 主页:http://destroydrop.com/javascripts/tree/ dTree是个很方便在页面生 ...

  5. dTree动态生成树(后台处理,简化前台操作)

    dTree是个很方便在页面生成树的 js 控件,如果你下载了,我猜里在几分钟之内便能在页面上显示出一颗树来. 它本身给的例子是通过一些静态数据构造树,下面我说一种通过查询的数据动态构造树的方法. 例子 ...

  6. JSON动态生成树

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

  7. ztree实现左边动态生成树,右边为具体信息功能

    页面原型图: 图片.png 功能需求:点击左边树上的子节点,像后台发送请求,将请求到的信息展示在右边的表单里面 前端代码实现: 引入css文档: <link rel="styleshe ...

  8. Ext.Net学习笔记23:Ext.Net TabPanel用法详解

    Ext.Net学习笔记23:Ext.Net TabPanel用法详解 上面的图片中给出了TabPanel的一个效果图,我们来看一下代码: <ext:TabPanel runat="se ...

  9. Spring多数据源解决方案

    Figure 2 多数据源的选择逻辑渗透至客户端 解决方案 Figure 3 采用Proxy模式来封转数据源选择逻辑 通过采用Proxy模式我们在方案实现中实现一个虚拟的数据源.并且通过它来封装数据源 ...

随机推荐

  1. 做贴吧系统,偶然发现使用iframe的弊端

    个人拙见 常听人说起现在不建议使用iframe框架,而我却一再使用,也许是能力有限,一直没在意有什么弊端. 我这此使用的事左右iframe框架,并且只在主页中定义了大背景,每个页面并没有分别定义背景, ...

  2. 炉石传说 C# 开发笔记

    最近在大连的同事强力推荐我玩 炉石传说,一个卡牌游戏.加上五一放一个很长很长的假期,为了磨练自己,决定尝试开发一个C#的炉石传说. 这件事情有人已经干过了,开发了一个网页版的炉石,但是貌似不能玩... ...

  3. 使用List把一个长字符串分解成若干个短字符串

    把一个长字符串分解成若干个固定长度的短字符串,由于事先不知道长字符串的长度,以及短字符串的数量,只能使用List. public static void get_list_sbody(String s ...

  4. 导出 XE6 预设 Android Style (*.style) 档案

    如果想要修改 Android Style 可以将它导出成 *.style 后再加入 TStyleBook 内来修改(iOS 的方法亦同):

  5. Flume

    http://www.ibm.com/developerworks/cn/data/library/bd-1404flumerevolution/index.html https://flume.ap ...

  6. jquery常见知识点 总结

    1. jquery特点 2. jquery中css选择器用法 jQuery使用了一套css选择器,共有5种,即标签选择器,ID选择器,类选择器,通用选择器和群组选择器,现分述如下:   标签选择器 用 ...

  7. linux下安装redis的详细过程

    先安装一些组件: yum -y install gcc gcc-c++ libstdc++-devel 下载并安装: # wget http://download.redis.io/releases/ ...

  8. PHP内核探索之变量(4)- 数组操作

    上一节(PHP内核探索之变量(3)- hash table),我们已经知道,数组在PHP的底层实际上是HashTable(链接法解决冲突),本文将对最常用的函数系列-数组操作的相关函数做进一步的跟踪. ...

  9. 2014年物联网Internet of Things应用简介

    body{ font: 16px/1.5em 微软雅黑,arial,verdana,helvetica,sans-serif; }         物联网(Internet of Things,缩写I ...

  10. DBHelper (支持事务与数据库变更)

    1 概述 更新内容:添加 "支持数据分页" 这个数据库操作类的主要特色有 1>     事务操作更加的方便 2>     变更数据库更加的容易 3>  支持数据分 ...