本示例只做到指定id用户的拥有的权限回显,并能动态获得ztree中重新选择的权限id。(至于权限的更新,就是后台人员对象和权限对象建立关系的过程,不做展示)

第一步:拼写jsp页面(下载ztree包,把css,js库导入webroot下。并在jsp页面上引用,将demo中ztree的显示代码贴上)如下

  1. <html>
  2. <head>
  3.  
  4. <link rel="stylesheet" href="<%=request.getContextPath() %>/css/zTreeStyle/zTreeStyle.css" type="text/css">
  5. <script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery-1.4.4.min.js"></script>
  6. <script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery.ztree.core-3.5.js"></script>
  7. <script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery.ztree.excheck-3.5.js"></script>
  8. <script type="text/javascript">
  9. //ztree的Demo代码
  10. var setting = {
  11. check: {
  12. enable: true
  13. },
  14. data: {
  15. simpleData: {
  16. enable: true
  17. }
  18. }
  19. };
  20. //ztree的Demo代码
  21. var zNodes;
  22.  
  23. //当页面加载完毕,向后台发送ajax请求,获取用户id为1的用户所拥有的权限(这里要显示所有权限,该id用户的权限回显时,被自动选中)
  24. function loadPower(){
  25. $.ajax({
  26. type:"post",
  27. url:"<%=request.getContextPath() %>/PowerAction!query",
  28. data:{"uid":1},
  29. async:false,
  30. dataType:"json",
  31. success:function(msg){
  32. zNodes=msg["tree"];
  33. }
  34.  
  35. })
  36.  
  37. }
  38.  
  39. //用户重新选择权限时,获取选择权限的id,此处可以拼接权限id的字符串,到后台切割成数组。String.split(",")
  40. function test(){
  41. //获取被选中的节点集合
  42. var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
  43. var nodes = treeObj.getCheckedNodes(true);
  44. //如果nodes的长度大于0说明ztree中有被选中的节点
  45. if(nodes.length>0){
  46. for(var i=0;i<nodes.length;i++){
  47. var id=nodes[i]["id"];//获取选中节点的id
  48. var name=nodes[i]["name"];//获取选中节点的名字
  49. alert(id);
  50. alert(name);
  51. }
  52. }else{
  53. alert("没有选中节点");
  54. }
  55.  
  56. }
  57.  
  58. //页面加载完毕时加载此方法
  59. $(document).ready(function(){
  60. loadPower();
  61. $.fn.zTree.init($("#treeDemo"), setting, zNodes);
  62. });
  63. </script>
  64. </head>
  65.  
  66. <body>
  67. <div class="zTreeDemoBackground left">
  68. <ul id="treeDemo" class="ztree"></ul>
  69. </div>
  70. <input type="hidden" name="uid" value="${uid }">
  71. <input type="button" value="测试被选中的节点的id" onclick="test();" />
  72. </body>
  73. </html>

第二步:后台接受前台请求。action的方法和service加工数据的方法和dao层查询数据的方法

  1. /**
  2. * action层
  3. * 接受前台的ajax请求,获取所有权限(指定id用户拥有的权限,在回显成ztree节点时被选中)
  4. * @Title: query
  5. * @Description: TODO(这里用一句话描述这个方法的作用)
  6. * @return
  7. * @return String 返回类型
  8. * @author 尚晓飞
  9. * @date 2014-9-29 下午3:45:42
  10. */
  11. public String query(){
  12. //响应对象
  13. PrintWriter out=null;
  14. try {
  15. //获取加工好的权限集合(指定id用户的权限在回显时被选中)
  16. List<Map<String,Object>> list=powerService.queryByStuId(uid);
  17. //获取响应对象
  18. HttpServletResponse resp=ServletActionContext.getResponse();
  19. //防止响应回去的数据乱码
  20. resp.setCharacterEncoding("utf-8");
  21. resp.setHeader("content-type", "text/html;charset=utf-8");
  22. resp.setContentType("text/html;charset=utf-8");
  23. //包装成json数据格式
  24. JSONObject jsonObject=new JSONObject();
  25. jsonObject.put("tree",list);
  26. //响应ajax请求
  27. out=resp.getWriter();
  28. out.print(jsonObject);
  29. } catch (IOException e) {
  30. // TODO Auto-generated catch block
  31. e.printStackTrace();
  32. }finally{
  33. out.close();
  34. }
  35.  
  36. return null;
  37. }
  38.  
  39. /**
  40. * service业务层
  41. * 用于加工前台需要的数据格式
  42. * (1)查询出所有的权限集合
  43. * (2)查询出指定id用户拥有的权限集合
  44. * (3)加工前台需要的数据集合
  45. * 注意点:hibernate从数据库中获取的对象都是单例模式,也就是说listOne.contains(power)是可以用于判断的
  46. * 因为list集合是有序可重复的容器。
  47. * @Title: queryByStuId
  48. * @Description: TODO(这里用一句话描述这个方法的作用)
  49. * @author 尚晓飞
  50. * @date 2014-9-29 下午3:48:42
  51. * @param id
  52. * @return
  53. * @see com.bjsxt.sxf.service.PowerService#queryByStuId(java.lang.Integer)
  54. */
  55. @Override
  56. public List<Map<String, Object>> queryByStuId(Integer id) {
  57. // TODO Auto-generated method stub
  58. //查询所有权限
  59. List<Power> listAll=powerDao.queryAll();
  60. //查询出指定id用户的权限
  61. List<Power> listOne=powerDao.queryByUid(id);
  62. //包装ztree
  63. List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();
  64. Map<String, Object> map=null;
  65. //{ id:2, pId:0, name:"随意勾选 2", checked:true, open:true},
  66. //需要加工成的模式。
  67. for(int i=0;i<listAll.size();i++){
  68. map=new HashMap<String, Object>();
  69. Power power=listAll.get(i);
  70. map.put("id",power.getId());
  71. map.put("pId",power.getParentId());
  72. map.put("name", power.getName());
  73. if(listOne!=null&&listOne.size()>0&&listOne.contains(power)){
  74. map.put("checked",true);
  75. map.put("open", true);
  76. map.put("url",power.getUrl());
  77. }else{
  78. map.put("checked",false);
  79. map.put("open", false);
  80. }
  81. list.add(map);
  82. }
  83. return list;
  84. }
  85.  
  86. /**
  87. * dao层
  88. * 查询出所有权限集合(hql语句)
  89. * @Title: queryAll
  90. * @Description: TODO(这里用一句话描述这个方法的作用)
  91. * @return
  92. * @return List<Power> 返回类型
  93. * @author 尚晓飞
  94. * @date 2014-9-29 下午3:52:44
  95. */
  96. public List<Power> queryAll(){
  97. return hibernateTemplate.find("from Power");
  98. }
  99.  
  100. /**
  101. * dao层
  102. * 查询出指定用户id拥有的权限集合
  103. * @Title: queryByUid
  104. * @Description: TODO(这里用一句话描述这个方法的作用)
  105. * @param id
  106. * @return
  107. * @return List<Power> 返回类型
  108. * @author 尚晓飞
  109. * @date 2014-9-29 下午3:53:08
  110. */
  111. public List<Power> queryByUid(final Integer id){
  112. return hibernateTemplate.execute(new HibernateCallback<List<Power>>() {
  113.  
  114. @Override
  115. public List<Power> doInHibernate(Session session)
  116. throws HibernateException, SQLException {
  117. // TODO Auto-generated method stub
  118. String sql="SELECT * from shang_power p where p.id IN (SELECT sp.power_id from stu_power sp where sp.stu_id=?)";
  119. SQLQuery query=session.createSQLQuery(sql).addEntity(Power.class);
  120. query.setParameter(0, id);
  121.  
  122. List<Power> list=query.list();
  123. return list;
  124. }
  125.  
  126. });
  127. }

Ztree小demo用于系统授权的更多相关文章

  1. Android -BLE蓝牙小DEMO

    代码地址如下:http://www.demodashi.com/demo/13890.html 原文地址: https://blog.csdn.net/vnanyesheshou/article/de ...

  2. Nancy之基于Self Hosting的补充小Demo

    前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with OWIN 以demo的形式简单描述了一下. 这篇是为Self H ...

  3. 一周一个小demo — 前端后台的交互实例

    这一周呢,本K在大神的指导下,完成了一个利用ajax与php文件上传处理相结合的一个留言板功能的小实例,下面就让本K来带大家瞅瞅如何实现这一种功能. 一.界面概览 首先我们来看一下这个小demo的具体 ...

  4. 【微信小程序】再次授权地理位置getLocation+openSetting使用

    写在前面:在tarbar主页面,再次授权JS代码请放在onshow里面:在详情页(非一级主页面),再次授权JS代码请放在onReady里面,具体原因我前面博客讲了的. 我们知道: 1.微信的getLo ...

  5. 移动端页面弹幕小Demo实例说明

    代码地址如下:http://www.demodashi.com/demo/11595.html 弹幕小Demo实例地址,点击看效果 写在前面:尝试做了一下弹幕的实例,欢迎提出并指正问题 问题说明: D ...

  6. Nancy之基于Nancy.Hosting.Self的小Demo

    继昨天的Nancy之基于Nancy.Hosting.Aspnet的小Demo后, 今天来做个基于Nancy.Hosting.Self的小Demo. 关于Self Hosting Nancy,官方文档的 ...

  7. Nancy之基于Nancy.Owin的小Demo

    前面做了基于Nancy.Hosting.Aspnet和Nancy.Hosting.Self的小Demo 今天我们来做个基于Nancy.Owin的小Demo 开始之前我们来说说什么是Owin和Katan ...

  8. Android -- 自定义View小Demo,动态画圆(一)

    1,转载:(http://blog.csdn.NET/lmj623565791/article/details/24500107),现在如下图的效果: 由上面的效果图可以看到其实是一个在一个圆上换不同 ...

  9. 一个基于ES5的vue小demo

    由于现在很多vue项目都是基于ES6开发的,而我学vue的时候大多是看vue官网的API,是基于ES5的,所以对于刚接触项目的我来说要转变为项目的模块化写法确实有些挑战.因此,我打算先做一个基于ES5 ...

随机推荐

  1. 6.MySQL必知必会之数据过滤-WHERE组合子句

    数据过滤-WHERE组合子句 本章讲授如何组合WHERE子句以建立功能更强的更高级的搜索条件. 我们还将学习如何使用NOT和IN操作符. 1.组合WHERE子句 上一章介绍的WHERE子句在过滤数据时 ...

  2. [翻译] Rails::Railtie

    原文:http://api.rubyonrails.org/classes/Rails/Railtie.html Railtie 是 Rails  框架的核心,提供几个钩子来扩展或修改 Rails 的 ...

  3. 2017-2018 ACM-ICPC Latin American Regional Programming Contest Solution

    A - Arranging tiles 留坑. B - Buggy ICPC 题意:给出一个字符串,然后有两条规则,如果打出一个辅音字母,直接接在原字符串后面,如果打出一个元音字母,那么接在原来的字符 ...

  4. zw版【转发·台湾nvp系列Delphi例程】HALCON HSerializedItem

    zw版[转发·台湾nvp系列Delphi例程]HALCON HSerializedItem procedure TForm1.FormShow(Sender: TObject);var img, im ...

  5. TED #06# Questioning the universe

    Stephen Hawking: Questioning the universe 1. 第一段: There is nothing bigger or older than the universe ...

  6. logstash收集Nginx日志,转换为JSON格式

    Nginx日志处理为JSON格式,并放置在http区块: log_format json '{"@timestamp":"$time_iso8601",' '& ...

  7. springboot2 统一返回结果

    统一返回结果是说,不用在controller层,new一个对象,或用工厂创建这个对象,再返回这个对象,而是这个Action该返回什么就返回什么, 我们再通过mvc的流程,再对返回对象做进一步的封装,以 ...

  8. 《F4+2》——团队项目的原型设计与开发

      目 录 1 · 团队信息 2 · NABCD模型 3.  原型设计的工具 4 · 原型设计 5 · PSP表格 6 · 团队设计过程 7 · 原型设计心得   一 · 团 队 信 息 成 员 列 ...

  9. js的数组与对象关系

    有的时候总犯糊涂,不理解对象和数组的关系,转载一篇文章,深刻记忆一下 http://hi.baidu.com/samdan/item/05179313d1ee4b9e99ce3371 比如有一个数组a ...

  10. Model/ModelMap 和 ModelAndView 的区别使用

    Model/ModelMap 和 ModelAndView 的区别使用 Model/ModelMap controller: package springmvc.controller; import ...