1.数据库表设计

2.实体类设计

 package com.ieou.capsule.dto.SystemPermissions;

 import java.util.List;

 /**
* 功能菜单类
*/
public class SystemPermissionsTree { private String functionCode;//菜单码 private String parentFunctionCode;//父级菜单码 private String functionName;//菜单名 private Boolean flag; // true:选中 false:未选中 private List<SystemPermissionsTree> childrenList; public String getFunctionCode() {
return functionCode;
} public void setFunctionCode(String functionCode) {
this.functionCode = functionCode;
} public String getParentFunctionCode() {
return parentFunctionCode;
} public void setParentFunctionCode(String parentFunctionCode) {
this.parentFunctionCode = parentFunctionCode;
} public String getFunctionName() {
return functionName;
} public void setFunctionName(String functionName) {
this.functionName = functionName;
} public Boolean getFlag() {
return flag;
} public void setFlag(Boolean flag) {
this.flag = flag;
} public List<SystemPermissionsTree> getChildrenList() {
return childrenList;
} public void setChildrenList(List<SystemPermissionsTree> childrenList) {
this.childrenList = childrenList;
}
}

3.递归工具类

 package com.ieou.capsule.util;

 import com.ieou.capsule.dto.SystemPermissions.SystemPermissionsTree;

 import java.util.ArrayList;
import java.util.List; public class TreeUtil {
/**
* 作者:一沐枫一
* 来源:CSDN
* 原文:https://blog.csdn.net/gxgl8811/article/details/72803833
* 版权声明:本文为博主原创文章,转载请附上博文链接!
*/ public static List<SystemPermissionsTree> getTreeList(List<SystemPermissionsTree> entityList) {
List<SystemPermissionsTree> resultList = new ArrayList<>(); //获取顶层元素集合
String parentCode;
for (SystemPermissionsTree entity : entityList) {
parentCode = entity.getParentFunctionCode();
//顶层元素的parentCode==null或者为0
if (parentCode == null || "0".equals(parentCode)) {
resultList.add(entity);
}
} //获取每个顶层元素的子数据集合
for (SystemPermissionsTree entity : resultList) {
entity.setChildrenList(getSubList(entity.getFunctionCode(), entityList));
} return resultList;
} /**
* 获取子数据集合
*
* @param id
* @param entityList
* @return
* @author jianda
* @date 2017年5月29日
*/
private static List<SystemPermissionsTree> getSubList(String id, List<SystemPermissionsTree> entityList) {
List<SystemPermissionsTree> childList = new ArrayList<>();
String parentId; //子集的直接子对象
for (SystemPermissionsTree entity : entityList) {
parentId = entity.getParentFunctionCode();
if (id.equals(parentId)) {
childList.add(entity);
}
} //子集的间接子对象
for (SystemPermissionsTree entity : childList) {
entity.setChildrenList(getSubList(entity.getFunctionCode(), entityList));
} //递归退出条件
if (childList.size() == 0) {
return null;
} return childList;
} }

java递归 处理权限管理菜单树或分类的更多相关文章

  1. springboot学习笔记:11.springboot+shiro+mysql+mybatis(通用mapper)+freemarker+ztree+layui实现通用的java后台管理系统(权限管理+用户管理+菜单管理)

    一.前言 经过前10篇文章,我们已经可以快速搭建一个springboot的web项目: 今天,我们在上一节基础上继续集成shiro框架,实现一个可以通用的后台管理系统:包括用户管理,角色管理,菜单管理 ...

  2. [转]java web简单权限管理设计

    原文地址:http://blog.csdn.net/zwx19921215/article/details/44467099 最近在做一个网站类型项目,主要负责后台,ui框架选型为jquery eas ...

  3. java web简单权限管理设计

    一套最基本的权限管理包括用户.角色.资源. 数据库设计 我的设计如下: 用户:user 角色:role 用户-角色:user_role 资源:resource(包括上级菜单.子菜单.按钮等资源) 角色 ...

  4. 【Java】JavaWeb权限管理

    权限管理分析 每个网站都涉及到访问权限的控制.每个站点资源都需要被管理起来,用户只有具有访问某个资源的特定权限,才能够访问,否则拒绝访问.网站的访问权限控制,一种方法从 URI 入手,站点的每个资源都 ...

  5. java中通用权限管理设计(转)

    原文地址:http://www.cnblogs.com/a7345678/archive/2008/09/25/1298838.html 转自博客园暗夜精灵-鬼才阁 实现业务系统中的用户权限管理 B/ ...

  6. vue中组件之间的相互调用,及通用后台管理系统左侧菜单树的迭代生成

    由于本人近期开始学习使用vue搭建一个后端管理系统的前端项目,在左侧生成菜单树的时候遇到了一些问题.在这里记录下 分析:由于本人设定的菜单可以使多级结构,直接使用vue的v-for 遍历并不是很方便. ...

  7. ERP的权限管理的操作与设计--开源软件诞生24

    赤龙ERP用户与权限管理讲解--第24篇 用日志记录"开源软件"的诞生 [进入地址 点亮星星]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/re ...

  8. JAVA递归生成树形菜单

    递归生成一个如图的菜单,编写两个类数据模型Menu.和创建树形的MenuTree.通过以下过程实现: 1.首先从菜单数据中获取所有根节点. 2.为根节点建立次级子树并拼接上. 3.递归为子节点建立次级 ...

  9. java生成多级菜单树

    使用java实现一个多级菜单树结构 先上数据库 ps_pid字段很重要,是父级菜单的id Menu类 Menu类要新增一个字段,用来存放子菜单 /** * 子菜单列表 */ private List& ...

随机推荐

  1. Django框架----Form组件

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...

  2. Eloquent JavaScript #09# Regular Expressions

    索引 Notes js创建正则表达式的两种方式 js正则匹配方式(1) 字符集合 重复匹配 分组(子表达式) js正则匹配方式(2) The Date class 匹配整个字符串 Choice pat ...

  3. 解决webgl使用canvas.toDataURL()没有内容的问题

    转的,记录一下,我还没有验证. 这个问题很好解决,就是在获取webgl对象的时候,多传入一个{preserveDrawingBuffer: true},然后在使用canvas.toDataURL()获 ...

  4. MySQL按指定字段自定义列表排序

    亲测实例: 1级排序:同城>异城 2级排序:未领养>以领养 3级排序:发布最新靠前 MYSQL语句如下: SELECT ura.id,ura.city,ura.uid,ura.rescue ...

  5. Centos下搭建golang环境

    一.下载安装包 先查看一下我的Centos版本,这里是6.4. # cat /etc/redhat-release CentOS release 6.4 (Final) 去go语言中文社区下载想要下载 ...

  6. RadioButton在数据列表中实现单选功能

    在服务器端动态生成的name总是不断变化,故需手动实现单选 ; <html xmlns="http://www.w3.org/1999/xhtml"> <head ...

  7. 【4OpenCV】OpenCV和RTSP的综合研究

    一.RTSP是什么?用来干什么? RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和 ...

  8. bzoj 4044 Virus synthesis - 回文自动机 - 动态规划

    题目传送门 需要高级权限的传送门 题目大意 要求用两种操作拼出一个长度为$n$的只包含'A','T','G','C'的字符串 在当前字符串头或字符串结尾添加一个字符 将当前字符串复制,将复制的串翻转, ...

  9. Selenium Webdriver弹出框的种种类型

    普通弹出框 div 一般这种 弹出框都属于dom的一部分,我们查看一下页面源码就可以定位到改弹出框了,然后定位下右上角的那个关闭, 这里有id,所以很方便通过 dr.findElement(By.id ...

  10. 百度搜索引擎取真实地址-python代码

    代码 def parseBaidu(keyword, pagenum): keywordsBaseURL = 'https://www.baidu.com/s?wd=' + str(quote(key ...