jstree动态生成树

      前篇文章简单介绍了静态生成树,这篇文章将通过后台把数据通过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包。

posted @ 2015-08-12 21:12  sky_烁  阅读(4033)  评论(0编辑  收藏  举报