zoukankan      html  css  js  c++  java
  • 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包。

  • 相关阅读:
    vim常用命令集(摘自鸟哥私房菜)
    LINUX下把多行文件合并成一行,并组装成SQL
    UVA 10148 Advertisement (贪心 + 区间选点问题)
    linux环境应用程序LOG日志打印(C语言)
    SharePoint 2013 Nintex Workflow 工作流帮助(三)
    SharePoint 2013 Nintex Workflow 工作流帮助(二)
    SharePoint 2013 Nintex Workflow 工作流帮助(一)
    SharePoint表单和工作流
    SharePoint表单和工作流
    SharePoint表单和工作流
  • 原文地址:https://www.cnblogs.com/sky-/p/4725564.html
Copyright © 2011-2022 走看看