看到ztree.js,这几个字眼,毋庸置疑,那肯定就是tree树形结构了,曾经的swing年代有jtree,后来jquery年代有jstree和treeview,虽然我没写过,但是我见过,一些小功能做起来比较繁琐,几个功能做了一个月,当然了有能力的关系,也有插件易用度的关系

最近要实现的功能用tree树形结构来做是最好的,就是资源的分配,来简单讲讲ztree吧,这是目前国内很火的一个插件,百度一下就能了解,使用起来十分简单

小编我用过3年的jqgrid,在此还是要再次感谢当年的王组让我去跟jqgrid深入浅出,多用了jqgrid后,再看ztree,那就十分简单了,不知道ztree作者是否也参考过jqgrid

首先你需要引入js以及css吧

  1. <!-- ztree -->
  2. <link href="<%=request.getContextPath()%>/css/ztree/zTreeStyle/zTreeStyle.css" rel="stylesheet">
  3. <script src="<%=request.getContextPath()%>/js/ztree/jquery.ztree.core.js"></script>

然后你需要定义一个id="treePermission",这点和jqgrid一样

  1. <!-- ztree start -->
  2. <div class="zTreeDemoBackground left">
  3. <ul id="treePermission" class="ztree"></ul>
  4. </div>

定义一下数据结构和基本配置

  1. var setting = {
  2. async: {
  3. enable: true,
  4. url: getAsyncUrl,
  5. autoParam: ["id"]
  6. },
  7. data: {
  8. simpleData: {
  9. enable: true,
  10. idKey: "id",
  11. pIdKey: "pId",
  12. rootPId: 0
  13. }
  14. }
  15. };
  16.  
  17. // 查询子节点
  18. function getAsyncUrl(treeId, treeNode) {
  19. return "<%=request.getContextPath()%>/auth/permission/getTreeSubNode";
  20. }
  21.  
  22. var zNodes =[
  23. { id:1, pId:0, name:"父节点1 - 展开", open:true},
  24. { id:11, pId:1, name:"父节点11 - 折叠"},
  25. { id:111, pId:11, name:"叶子节点111"},
  26. { id:112, pId:11, name:"叶子节点112"},
  27. { id:113, pId:11, name:"叶子节点113"},
  28. { id:114, pId:11, name:"叶子节点114"},
  29. { id:12, pId:1, name:"父节点12 - 折叠"},
  30. { id:121, pId:12, name:"叶子节点121"},
  31. { id:122, pId:12, name:"叶子节点122"},
  32. { id:123, pId:12, name:"叶子节点123"},
  33. { id:124, pId:12, name:"叶子节点124"},
  34. { id:13, pId:1, name:"父节点13 - 没有子节点", isParent:true},
  35. { id:2, pId:0, name:"父节点2 - 折叠"},
  36. { id:21, pId:2, name:"父节点21 - 展开", open:true},
  37. { id:211, pId:21, name:"叶子节点211"},
  38. { id:212, pId:21, name:"叶子节点212"},
  39. { id:213, pId:21, name:"叶子节点213"},
  40. { id:214, pId:21, name:"叶子节点214"},
  41. { id:22, pId:2, name:"父节点22 - 折叠"},
  42. { id:221, pId:22, name:"叶子节点221"},
  43. { id:222, pId:22, name:"叶子节点222"},
  44. { id:223, pId:22, name:"叶子节点223"},
  45. { id:224, pId:22, name:"叶子节点224"},
  46. { id:23, pId:2, name:"父节点23 - 折叠"},
  47. { id:231, pId:23, name:"叶子节点231"},
  48. { id:232, pId:23, name:"叶子节点232"},
  49. { id:233, pId:23, name:"叶子节点233"},
  50. { id:234, pId:23, name:"叶子节点234"},
  51. { id:3, pId:0, name:"父节点3 - 没有子节点", isParent:true}
  52. ];
  53.  
  54. $(document).ready(function(){
  55. $.post("<%=request.getContextPath()%>/auth/permission/getTreeRootNode",{},function(jsonResult){
  56. $.fn.zTree.init($("#treePermission"), setting, jsonResult.data);
  57. });
  58. });

zNodes是初始化的静态数据,可以不用,这里为了方便贴了出来,初始化的时候放入$.fn.zTree.init($("#treePermission"), setting, zNodes);即可

znodes我没有使用,在初始化的时候会预先加载根目录,然后点击再次加载子目录

  1. @Override
  2. public List<TreeNode> queryNode(Integer parentId) {
  3.  
  4. SysPermissionExample example = new SysPermissionExample();
  5. Criteria criteria = example.createCriteria();
  6. criteria.andParentidEqualTo(parentId);
  7. List<SysPermission> permissions = sysPermissionMapper.selectByExample(example);
  8.  
  9. // 如果为空,说明没有根权限,需要创建一个
  10. if (permissions.isEmpty()) {
  11. return null;
  12. }
  13.  
  14. // 获得根权限返回出去
  15. List<TreeNode> rootNodeList = new ArrayList<TreeNode>();
  16. for (SysPermission p : permissions) {
  17. TreeNode rootNode = new TreeNode(p.getId(), p.getParentid(), p.getName(),
  18. p.getType() == ShiroPermissionTypeEnum.MENU.value ? true : false,
  19. p.getType() == ShiroPermissionTypeEnum.MENU.value ? true : false);
  20. rootNodeList.add(rootNode);
  21. }
  22.  
  23. return rootNodeList;
  24. }
  1. @RequestMapping(value="/permission/getTreeSubNode")
  2. @ResponseBody
  3. public List<TreeNode> getTreeSubNode(TreeNode node) throws Exception{
  4.  
  5. List<TreeNode> rootNodeList = systemAuthService.queryNode(node.getId());
  6. return rootNodeList;
  7. }

好了,调用后就直接可以使用了,非常简单,还有一些简单配置请参考官网吧~

使用ztree.js,受益一生,十分钟学会使用tree树形结构插件的更多相关文章

  1. PHP学习过程_Symfony_(3)_整理_十分钟学会Symfony

    这篇文章主要介绍了Symfony学习十分钟入门教程,详细介绍了Symfony的安装配置,项目初始化,建立Bundle,设计实体,添加约束,增删改查等基本操作技巧,需要的朋友可以参考下 (此文章已被多人 ...

  2. 十分钟学会 tmux

    tmux 是一款终端复用命令行工具,一般用于 Terminal 的窗口管理.在 macOS 下,使用 iTerm2 能应付绝大多数窗口管理的需求. 如上图所示,iTerm2 能新建多个标签页(快捷键 ...

  3. 快速入门:十分钟学会Python

    初试牛刀 假设你希望学习Python这门语言,却苦于找不到一个简短而全面的入门教程.那么本教程将花费十分钟的时间带你走入Python的大门.本文的内容介于教程(Toturial)和速查手册(Cheat ...

  4. Python十分钟学会

    初试牛刀 假设你希望学习Python这门语言,却苦于找不到一个简短而全面的入门教程.那么本教程将花费十分钟的时间带你走入Python的大门.本文的内容介于教程(Toturial)和速查手册(Cheat ...

  5. 快速入门:十分钟学会Python(转)

    初试牛刀 假设你希望学习Python这门语言,却苦于找不到一个简短而全面的入门教程.那么本教程将花费十分钟的时间带你走入Python的大门.本文的内容介于教程(Toturial)和速查手册(Cheat ...

  6. 高速入门:十分钟学会Python

    初试牛刀 如果你希望学习Python这门语言.却苦于找不到一个简短而全面的新手教程.那么本教程将花费十分钟的时间带你走入Python的大门.本文的内容介于教程(Toturial)和速查手冊(Cheat ...

  7. 十分钟学会canvas

    一句话描述:canvas是HTML5加入的用来绘制2D图像与文字的元素. 基础 简单步骤: var c = document.getElementById("mycanvas"); ...

  8. 十分钟学会Markdown基本语法

    文章目录 Markdown 语法 一.标题 这是一级标题 这是二级标题 这是三级标题 这是四级标题 这是五级标题 这是六级标题 二.字体 三.引用 四.分割线 五.图片 六.超链接 七.列表 八.表格 ...

  9. 零基础十分钟学会用git在coding.net上传(pull)和push

    ---恢复内容开始--- 对于入门者来说,特别是刚刚接触计算机的人来说,模仿是最快的学习方式了,先能够会使用(对于初学者来说,这种使用新事物的感觉很能爽的)至于原理,以后再说.下面先让初学者快速的学会 ...

随机推荐

  1. mysql在Windows下使用mysqldump命令备份数据库

    在cmd窗口中使用mysqldump命令首先需要配置环境变量 1,在计算机中找到MySQL的安装位置,找到MySQL Workbench,比如我的是C:\Program Files\MySQL\MyS ...

  2. 【position也可以很复杂】当弹出层遇上了鼠标定位(下)

    前言 接着昨天的内容写,为了保证内容连续性,这里还是把昨天的内容拷了过来. 请用现代浏览器测试 引出问题 有图有真相,我们来看一个智联招聘里面经常出现的图层: 他这个是没有什么问题的,我们来简单看看其 ...

  3. 尝试加载 Oracle 客户端库时引发 BadImageFormatException。问题记录

    电脑是win8 64位,安装oracle 11g r2 64位的,谁知道一切装完毕后,打开项目却连不上oracle数据了...首先是pl/sql连不上,装了oracle服务器,应该是不用再装客户端,p ...

  4. 【移动适配】一个像素的border怎么实现

    一个像素里复杂纷扰的世界 文 | 啃先生 Mar.3rd.2016  首发于微信公众号(啃先生) 上一篇发了<[移动适配]移动Web怎么做屏幕适配> 壹 | Fisrt 在CSS的世界里P ...

  5. 基于Eclipse搭建STM32开源开发环境

    最近项目不忙,想着没事看看简单的嵌入式,弄弄物联网什么的.于是就从廉价的STM32开刀了.因为一直是做PC软件开发的,那VS的智能感知那叫一个爽啊,相比之下,觉得这个Keil简直就像文本编辑器一样lo ...

  6. 【Leafletjs】5.L.Control 自定义一个Control

    L.Control 所有leaflet控制的基础类.继承自IControl接口. 你可以这样添加控件: control.addTo(map); // the same as map.addContro ...

  7. word第一讲(0723)

    工作区导航 F6键:从程序窗口中的一个任务窗格移动到另一个任务窗格.(在菜单栏.工作区.状态栏切换) alt键选中选项卡.左右键切换选项卡.下光标切换到选项卡里具体内容. 设置版面 页面布局-> ...

  8. Android消息机制源码分析

    本篇主要介绍Android中的消息机制,即Looper.Handler是如何协同工作的: Looper:主要用来管理当前线程的消息队列,每个线程只能有一个Looper Handler:用来将消息(Me ...

  9. 关于<appSettings file="app.config" >引用外部文件的配置值

    web.config文件中,appSetting节点引用了外部的配置文件, <appSettings file="app.config"> </appSettin ...

  10. Sqlite学习笔记(一)&&编译安装

    Sqlite简介 sqlite是一个开源的嵌入式文件数据库,sqlite以动态链接库的方式供应用程序调用,所有的数据库对象都存储在同一个文件中. sqlite动态库非常小,最新的3.8.11版本也只有 ...