前篇文章简单介绍了静态生成树,这篇文章将通过后台把数据通过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. 【C#】Excel舍入函数Round、RoundUp、RoundDown的C#版

    本人在C#中进行小数舍入的时候常常会怀念Excel中的Round.RoundUp.RoundDown这几个函数,原因就是后者“接地气”,比较符合俺小老百姓的舍入要求,啥“银行家舍入法”就让银行家用去吧 ...

  2. UML - 类图

    在UML类图中,有以下几种常见关系: 泛化 - Generalization "is-a",继承关系,表示一般与特殊的关系: 子类(接口)特化父类(接口)的所有特征和行为,是对象之 ...

  3. iOS阶段学习第28天笔记(UIView的介绍)

    iOS学习(UI)知识点整理 一.关于UIVIew 的介绍 1)概念:UIView 是用于装载并展示各类控件的大容器,是iOS中所有UI控件的基类 2)UIView  初始化实例代码 UIView * ...

  4. 火狐浏览器+Firebug+FirePath测试Xpath

    前言 抓取网页数据时使用HtmlAgilityPack分析,需要通过xpath定位页面元素.如果有个xpath的生成和验证工具就事半功倍了,火狐浏览器插件FirePath配合Firebug就能完美实现 ...

  5. thinkphp端口配置

    <?php return array( //'配置项'=>'配置值' 'MODULE_ALLOW_LIST' => array('Home'), 'DEFAULT_MODULE' = ...

  6. [修复] Firemonkey 使用 DrawPath 断线问题(Android & iOS 平台)

    问题:使用 Canvas.DrawPath 绘制时,最后一点无法画到终点位置.(这个问题要在粗线才能察觉) 适用:Delphi 10 Seattle (或更早的版本) for Android & ...

  7. Bash中的任务(job)管理

    本来不准备写这篇博客的,因为任务管理(job管理)非常非常常用,以至于觉得根本没有必要去写这样一个东西.但想了下,还是记录一下吧,也许有人会用到呢. 不知你是否碰到过这样的情况,当你兴致勃勃的打开VI ...

  8. 微信公众平台关于fakeid和openid的解析

    今天在开发项目的时候遇到了个问题: 搞不清楚微信官方接口的fromusername(openid)和公众平台内每个粉丝所拥有的fakeid,于是在测试号中开始了对以上两项的研究,结果如下:   1.对 ...

  9. mvc和iis工作原理

    学习IIS & MVC的运行原理 我一直疑惑于以下问题,从客户端发出一个请求,请求到达服务器端是怎样跟iis衔接起来的,而iis又是怎样读取我发布的代码的,并返回服务器上的文件.这其中是怎样的 ...

  10. Rainyday.js – 使用 JavaScript 实现雨滴效果

    Rainyday.js 背后的想法是创建一个 JavaScript 库,利用 HTML5 Canvas 渲染一个雨滴落在玻璃表面的动画.Rainyday.js 有功能可扩展的 API,例如碰撞检测和易 ...