• ztree多级数据封装和遍历


     这里主要介绍controller封装ztree参数,具体业务以实际为准,这里controller里封装的数据最好写在service层。

    1.前台返回数据的格式

    var zNodes =[
                   { name:"父节点1 - 展开", open:true,
                       children: [
                           { name:"父节点11 - 折叠",
                               children: [
                                   { name:"叶子节点111"},
                                   { name:"叶子节点112"},
                                   { name:"叶子节点113"},
                                   { name:"叶子节点114"}
                               ]},
                           { name:"父节点12 - 折叠",
                               children: [
                                   { name:"叶子节点121"},
                                   { name:"叶子节点122"},
                                   { name:"叶子节点123"},
                                   { name:"叶子节点124"}
                               ]},
                           { name:"父节点13 - 没有子节点", isParent:true}
                       ]},
                   { name:"父节点2 - 折叠",
                       children: [
                           { name:"父节点21 - 展开", open:true,
                               children: [
                                   { name:"叶子节点211"},
                                   { name:"叶子节点212"},
                                   { name:"叶子节点213"},
                                   { name:"叶子节点214"}
                               ]},
                           { name:"父节点22 - 折叠",
                               children: [
                                   { name:"叶子节点221"},
                                   { name:"叶子节点222"},
                                   { name:"叶子节点223"},
                                   { name:"叶子节点224"}
                               ]},
                           { name:"父节点23 - 折叠",
                               children: [
                                   { name:"叶子节点231"},
                                   { name:"叶子节点232"},
                                   { name:"叶子节点233"},
                                   { name:"叶子节点234"}
                               ]}
                       ]},
                   { name:"父节点3 - 没有子节点", isParent:true}
    
               ];

    2.封装的类

    package com.stuwork.crowdfunding.bean;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Permission {
        private Integer id;
    
        private Integer pid;
    
        private String name;
    
        private String icon;
    
        private String url;
        private boolean open;
        private boolean checked;
        
        private List<Permission> children = new ArrayList<Permission>();
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public Integer getPid() {
            return pid;
        }
    
        public void setPid(Integer pid) {
            this.pid = pid;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name == null ? null : name.trim();
        }
    
        public String getIcon() {
            return icon;
        }
    
        public void setIcon(String icon) {
            this.icon = icon == null ? null : icon.trim();
        }
    
        public String getUrl() {
            return url;
        }
    
        public void setUrl(String url) {
            this.url = url == null ? null : url.trim();
        }
    
        public boolean isOpen() {
            return open;
        }
    
        public void setOpen(boolean open) {
            this.open = open;
        }
    
        public List<Permission> getChildren() {
            return children;
        }
    
        public void setChildren(List<Permission> children) {
            this.children = children;
        }
    
        public boolean isChecked() {
            return checked;
        }
    
        public void setChecked(boolean checked) {
            this.checked = checked;
        }
    }
    package com.stuwork.crowdfunding.util;
    public class AjaxResult {
        private boolean success;
        private String message;
        private Page page;
        private Object data;
        
        public Page getPage() {
            return page;
        }
    
        public void setPage(Page page) {
            this.page = page;
        }
    
        public boolean getSuccess() {
            return success;
        }
    
        public String getMessage() {
            return message;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    
        public void setSuccess(boolean success) {
            this.success = success;
        }
    
        public Object getData() {
            return data;
        }
    
        public void setData(Object data) {
            this.data = data;
        }
        
        
    }

    3.controller几种返回数据格式封装和优化

    package com.stuwork.crowdfunding.manager.controller;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import com.stuwork.crowdfunding.bean.Permission;
    import com.stuwork.crowdfunding.manager.service.PermissionService;
    import com.stuwork.crowdfunding.util.AjaxResult;
    
    @Controller
    @RequestMapping("/permission")
    public class PermissionController {
    
        @Autowired
        private PermissionService permissionService;
        
        //最终版方式1
        //最终优化版,减少循环的次数
        @ResponseBody
        @RequestMapping("/loadData")
        public Object loadData(){
            AjaxResult result = new AjaxResult();
    
            try {
                List<Permission> root = new ArrayList<Permission>();
                List<Permission>  permissionList = permissionService.getAllPermission();//根菜单
                Map<Integer,Permission> map = new HashMap<Integer,Permission>();
                for(Permission bean :permissionList){
                    map.put(bean.getId(), bean);
                }
                for(Permission bean :permissionList){
                    Permission children = bean;
                    if(bean.getPid() == 0){
                       root.add(bean);
                    }else{
                        Permission parent = map.get(children.getPid());
                        parent.getChildren().add(children);     
                    }
                }
                
                result.setData(root);
                result.setSuccess(true);
            } catch (Exception e) {
                result.setSuccess(false);
                result.setMessage("许可树加载失败");
                e.printStackTrace();
            }
            
            return result;
            
        }
       //方式2 @ResponseBody
    //递归优化 @RequestMapping("/loadData") public Object loadData(){ AjaxResult result = new AjaxResult(); try { List<Permission> root = new ArrayList<Permission>(); List<Permission> permissionList = permissionService.getAllPermission();//根菜单 for(Permission bean :permissionList){ Permission children = bean;//子菜单 if(children.getPid() == 0){ root.add(bean); }else{ for(Permission innerPermission:permissionList){ if(children.getPid() == innerPermission.getId()){ innerPermission.getChildren().add(children); break; } } } } result.setData(root); result.setSuccess(true); } catch (Exception e) { result.setSuccess(false); result.setMessage("许可树加载失败"); e.printStackTrace(); } return result; } //方式3 //递归,解决多个层次 //效率低,多次调用数据库 @ResponseBody @RequestMapping("/loadData") public Object loadData(){ AjaxResult result = new AjaxResult(); try { List<Permission> root = new ArrayList<Permission>(); Permission permission = permissionService.getRootPermission();//根菜单 root.add(permission); getPermissionChildern(permission); result.setData(root); result.setSuccess(true); } catch (Exception e) { result.setSuccess(false); result.setMessage("许可树加载失败"); e.printStackTrace(); } return result; } /** * 递归使用注意事项 * 1.调用自身 * 2.范围要不断缩小 * 3.要有跳出条件 * @param permission */ private void getPermissionChildern(Permission permission){ List<Permission> childrenList = permissionService.getChildrenPermissionByPid(permission.getId()); permission.setChildren(childrenList); for(Permission bean:childrenList){ getPermissionChildern(bean); } } //方式4(这个是demo,没从数据库取数据) @ResponseBody @RequestMapping("/loadData") public Object loadData(){ AjaxResult result = new AjaxResult(); try { Permission permission = new Permission();//父菜单 Permission permission1 = new Permission();//子菜单 Permission permission2 = new Permission();//子菜单 List<Permission> list = new ArrayList<Permission>();//子菜单 List<Permission> root = new ArrayList<Permission>();//根菜单 permission.setName("系统权限菜单"); permission.setOpen(true); permission1.setName("控制面板"); permission2.setName("权限管理"); list.add(permission1); list.add(permission2); permission.setChildren(list); root.add(permission); result.setData(root); result.setSuccess(true); } catch (Exception e) { result.setSuccess(false); result.setMessage("许可树加载失败"); e.printStackTrace(); } return result; }
    //方式5 @ResponseBody @RequestMapping(
    "/loadData") public Object loadData(){ AjaxResult result = new AjaxResult(); try { List<Permission> root = new ArrayList<Permission>(); Permission permission = permissionService.getRootPermission();//根菜单 permission.setOpen(true); root.add(permission); List<Permission> childrenList = permissionService.getChildrenPermissionByPid(permission.getId()); permission.setChildren(childrenList); for(Permission bean :childrenList){ bean.setOpen(true); List<Permission> innerChildrenList = permissionService.getChildrenPermissionByPid(bean.getId()); bean.setChildren(innerChildrenList); } result.setData(root); result.setSuccess(true); } catch (Exception e) { result.setSuccess(false); result.setMessage("许可树加载失败"); e.printStackTrace(); } return result; } }

    4.mapper文件方法

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.stuwork.crowdfunding.manager.dao.PermissionMapper">
      <resultMap id="BaseResultMap" type="Permission">
        <id column="id" jdbcType="INTEGER" property="id" />
        <result column="pid" jdbcType="INTEGER" property="pid" />
        <result column="name" jdbcType="VARCHAR" property="name" />
        <result column="icon" jdbcType="VARCHAR" property="icon" />
        <result column="url" jdbcType="VARCHAR" property="url" />
      </resultMap>
        <select id="getPermissionByRoleId" resultType="int">
        SELECT permissionid
          FROM t_role_permission 
         WHERE roleid = #{roleid}
      </select>
      <select id="getRootPermission" resultMap="BaseResultMap">
        SELECT id,pid,icon,url,name
          FROM t_permission 
         WHERE pid = 0
      </select>
      <select id="getChildrenPermissionByPid" resultMap="BaseResultMap">
        SELECT id,pid,icon,url,name
          FROM t_permission
         WHERE pid = #{id}
      </select>
      <select id="getAlltPermission" resultMap="BaseResultMap">
        SELECT id,pid,icon,url,name
          FROM t_permission 
      </select>
    
    </mapper>

    5.数据库表数据

  • 相关阅读:
    docker安装mtproto及报错解决方案
    Centos7下创建和管理用户
    GitHub项目绑定自己的域名
    navicate远程连接mysql8.0失败
    Java反射
    Spring AOP
    Spring注解
    学习进度笔记20
    学习进度笔记19
    学习进度笔记18
  • 原文地址:https://www.cnblogs.com/konglxblog/p/14811384.html
Copyright © 2020-2023  润新知