java框架 初始化菜单树

 

@RequestMapping("/tree") @DoLog(cnContent = "权限树初始化", value = false) //@Permission(name = "login.tree")
    public String tree(HttpServletRequest request, HttpServletResponse response, ZTreeComm zTree) throws Exception {
        try {
            //1、获取登陆人的信息
            SysUser currentUser = getLoginUser(request);
            // 2.根据id获取权限列表,id为空时获取父权限列表(limit=roleid)
            List<ZTreeComm> tree = sysUserService.initAuthorityTree(zTree, currentUser);
            // 3.设置父节点
            List<ZTreeComm> votree = new ArrayList<ZTreeComm>();
            for (int i = 0; i < tree.size(); i++) {
                ZTreeComm ztree = (ZTreeComm) tree.get(i);
                int total = sysUserService.isParent(ztree);
                ztree.setIsParent(total != 0 ? Constants.IS_TRUE : Constants.IS_FALSE);
                votree.add(ztree);
            }
            //4、list排序。
            Collections.sort(votree, new Comparator<ZTreeComm>() {
                public int compare(ZTreeComm arg0, ZTreeComm arg1) {
                    return arg0.getSortNo().compareTo(arg1.getSortNo());
                }
            });
            return this.ajax(response, votree);
        } catch (Exception e) {
            this.logException(e);
            return this.ajax(response, "系统出现异常: [" + e.getMessage() + "] 请与管理员联系!");
        }
    }
@Override
    public List<ZTreeComm> initAuthorityTree(ZTreeComm ztree, SysUser sysUser) throws Exception {
        //1、获取角色字符串
        List<SysRole> sysRoles = sysUser.getSysRoles();
        String roleId = "";
        if (CollectionHelp.isNotBank(sysRoles)) {
            for (Object obj : sysRoles) {
                SysRole role = (SysRole) obj;
                if (Constants.STATUS_ACTIVE.equals(role.getStatus())) {
                    roleId = role.getRoleId() + "," + roleId;
                }
            }
        }
        ztree.setDiyParams(roleId); //因为ztree并没有roleid的属性,所以使用ztree的空属性
        //2、根据ztree,获取权限信息
        List<ZTreeComm> dataList = new ArrayList<ZTreeComm>();
        if (StringUtils.isEmpty(ztree.getId())) {
            //id为空,初始加载,查询根节点. where parent_dept_id is null
            dataList = sqlSessionTemplate.selectList(SecurityMgrConstants.ZTREE_COMMON_MAPPER_NAMESPACE + ".getAuthorityRoot", ztree);
        } else {
            //id不为空,为下拉,查询子节点 . where parent_dept_id =id
            dataList = sqlSessionTemplate.selectList(SecurityMgrConstants.ZTREE_COMMON_MAPPER_NAMESPACE + ".getAuthorityById", ztree);
        }
        return dataList;
    }

 

获取用户的所有角色,并将角色id放入字符串中并存入ZtreeComm类中的自定义属性中去DiyParams

ZtreeComm应该是对应Sys_Authority表,但是表中并没有对应roleid的字段,所以实体类中将roleid以字符串的形式存储到ztree中去

接下来判断是否是根节点,//id为空,初始加载,查询根节点,//id不为空,为下拉,查询子节点

<!-- 查询部门根节点 -->
    <select id="getAuthorityRoot" resultMap="authorityTreeResultMap" parameterType="ZTreeComm">
        SELECT * FROM SYS_AUTHORITY WHERE AUTHORITY_ID IN(
            SELECT AUTHORITY_ID FROM SYS_ROLE_AUTHORITY WHERE INSTR(#{diyParams},ROLE_ID)>0
        )
        AND PARENT_ID IS NULL AND AUTHORITY_TYPE=‘2‘
    </select>

AUTHORITY_TYPE 权限类型: 1:普通权限   2:菜单 3:报表

获取权限集合后,判断每个权限哪些是父节点

for (int i = 0; i < tree.size(); i++) {
                ZTreeComm ztree = (ZTreeComm) tree.get(i);
                int total = sysUserService.isParent(ztree);
                ztree.setIsParent(total != 0 ? Constants.IS_TRUE : Constants.IS_FALSE);
                votree.add(ztree);
            }

 

<!-- 查询查看是否为父节点 -->
    <select id="isParent" resultType="integer" parameterType="ZTreeComm">
        SELECT COUNT(*) FROM SYS_AUTHORITY WHERE PARENT_ID=#{id} AND AUTHORITY_TYPE=‘2‘
    </select>

并给每个ztree的isparent赋值并存入新的集合中去

对新的集合进行排序

//4、list排序。
            Collections.sort(votree, new Comparator<ZTreeComm>() {
                public int compare(ZTreeComm arg0, ZTreeComm arg1) {
                    return arg0.getSortNo().compareTo(arg1.getSortNo());
                }
            });
时间: 2024-11-03 21:48:49

java框架 初始化菜单树的相关文章

zTree插件实现菜单树

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8" /> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 6 <title>Title</title> 7 <link href="JS/tool/zT

java实现的Trie树数据结构

最近在学习的时候,经常看到使用Trie树数据结构来解决问题,比如" 有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M.返回频数最高的100个词." 该如何解决? 有一种方案就是使用Trie树加 排序实现 . 什么是Trie 树呢?也就是常说的字典树,网上对此讲得也很多,简单补充一下个人理解: 它实际上相当于把单词的公共部分给拎出来,这样一层一层往上拎直到得到每个节点都是不可分的最小单元! 比如网上一个例子 一组单词,inn, int, at, a

DWZ SSH2 菜单树--使用Struts2 标签(iterator/set/if 组合使用)

最近在研究DWZ框架,然后要写一个菜单树,后台我使用了SSH2,然后想把菜单通过后台传过来的对象展示出来. 但是,发现应用样式的时候,如果子菜单在子循环中为空的话,会多出一对空标签“<ul></ul>”,而DWZ的框架的样式,一旦发现标签<li>下出现标签“<ul></ul>”, 不论标签“<ul></ul>”里的内容是否为空,都会判断<li>为父级菜单,不是为最终的子菜单. 所以我只能在页面的父级循环中使用s

java框架——经典的Hibernate

在编程开发中,我们有很多框架,他们有些很方便,也很实用,今天我们一起来认识一个java经典的框架Hibernate,Hibernate英文名称为"冬眠",这是个很有意思的技术,同样这个名字也很巧妙!大家先看看这个技术的书籍在国外的封面: 简介: 大家知道冬眠的动物是静止的,在冻僵的边缘,而Hibernate的一个巨大作用就是对数据持久化的实现,这两者有什么联系? 简单介绍数据持久化: 数据持久化是解决程序与数据库之间交互访问的问题,使程序不直接访问数据库,而是直接访问Session会话

Ztree菜单树数据回显

Ztree菜单树数据回显,分两部分查询数据: 其一: 根据实体id查询出其关联的菜单数据 其二: 查询所有的菜单数据. 然后,使用Ztree API中进行菜单数据回显的数据进行回显数据,勾选菜单复选框. 代码 1 //2.设置菜单树的全局变量 2 var setting = { 3 data : { 4 key : { 5 title : "t" 6 }, 7 simpleData : { //开启简单数据 8 enable : true, 9 } 10 }, 11 check : {

Java框架JSON-RPC项目demo代码实战

原创整理不易,转载请注明出处:Java框架JSON-RPC项目demo代码实战 代码下载地址:http://www.zuidaima.com/share/1781535155162112.htm 一.JSON-RPC-Java简介 JSON-RPC-Java是一个用Java来实现动态JSON-RPC的框架. 利用它内置的一个轻级量JSON-RPC JavaScripIt客户端,可以让你透明地在JavaScript中调用Java代码.JSON-RPC-Java可运行在Servlet容器中如Tomc

WPF在MainWindow中初始化菜单

1.定义一个菜单模型类,用于保存Key.Title以及子菜单_Submenus,FormFullName是用来保存菜单对应的控件. 2.MainWindow的构造方法里加入了一个程序集,洪水预报用的服务. 初始化系统菜单这里,用List<QlMenu>保存系统主菜单(主菜单用ToggleButton显示),有FormFullName属性的子菜单关联了用TabControl显示的窗口,在后面有专门方法处理. 3.主窗体Load的时候先取得所有菜单的集合--一个递归的List,然后再初始化每个菜单

java框架学习之路——Spring的体系结构

分类: java框架学习 Spring的体系结构 Spring是一个开源的轻量级框架 Spring项目开发流程: 创建项目-->添加必须的类库jar包-->创建源文件编程调用库-->创建bean的配置文件-->运行调试 核心特征: 1.AOP:面向切面编程 2.IOC:控制反转,把对象的创建交给Spring管理,依赖注入DI,对象生成放在了XML定义 3.跨越javaEE三层 Web层:SpringMVC Service层:Spring IOC Dao层:jdbcTemplate

流行的9个Java框架介绍: 优点、缺点等等

流行的9个Java框架介绍: 优点.缺点等等 在 2018年,Java仍然是世界上最流行的编程语言.它拥有一个巨大的生态系统,在全世界有超过900万Java开发人员.虽然Java不是最直接的语言,但是您不需要从头编写Java程序.有许多优秀的Java框架可以编写在Java虚拟机上运行的web和移动应用程序.微服务和REST api. Java框架允许您关注应用程序的业务逻辑,而不是编写数据库连接或处理异常等基本功能.此外,如果您有Java方面的经验,您可以快速入门.这些框架都使用相同的语法,使用