springmvc+ztree v3实现类似表单回显功能

     在做权限管理系统时,可能会用到插件zTree v3,这是一个功能丰富强大的前端插件,应用很广泛,如异步加载菜单制作、下拉选择、权限分配等。在集成SpringMVC中,我分别实现了zTree的添删改查,本节主要实现类似表单回显功能。如图:

1、前端代码

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>非异步加载节点</title>
<link rel="stylesheet"href="${pageContext.request.contextPath }/res/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="stylesheet"href="${pageContext.request.contextPath }/res/zTree/css/metroStyle/metroStyle.css" type="text/css">
<script type="text/javascript"src="${pageContext.request.contextPath }/res/bootstrap/js/jquery-1.9.1.min.js"></script>
<script type="text/javascript"src="${pageContext.request.contextPath }/res/bootstrap/js/bootstrap.js"></script>
<script type="text/javascript"src="${pageContext.request.contextPath }/res/zTree/js/jquery.ztree.core.js"></script>
<script type="text/javascript"src="${pageContext.request.contextPath }/res/zTree/js/jquery.ztree.excheck.js"></script>
<script type="text/javascript"src="${pageContext.request.contextPath }/res/zTree/js/jquery.ztree.exedit.js"></script>
<script type="text/javascript">var zNodes;var setting = {check: {enable: true},data: {simpleData: {enable: true}}};//当页面加载完毕,向后台发送ajax请求,获取用户id为1的用户所拥有的权限//(这里要显示所有权限,该id用户的权限回显时,被自动选中),这里的用户id为1仅做测试使用,实际开发中会传值function loadPower(){$.ajax({type:"post",url:"${pageContext.request.contextPath }/user/role_list.do",data:{"userId":1},async:false,dataType:"json",success:function(data){zNodes=data;}})}//用户重新选择权限时,获取选择权限的id,此处可以拼接权限id的字符串,到后台切割成数组。String.split(",")function test(){//获取被选中的节点集合var treeObj = $.fn.zTree.getZTreeObj("treeDemo");var nodes = treeObj.getCheckedNodes(true);//如果nodes的长度大于0说明ztree中有被选中的节点if(nodes.length>0){for(var i=0;i<nodes.length;i++){var id=nodes[i]["id"];//获取选中节点的idvar name=nodes[i]["name"];//获取选中节点的名字alert(id);alert(name);}}else{alert("没有选中节点");}}//页面加载完毕时加载此方法$(document).ready(function(){loadPower();$.fn.zTree.init($("#treeDemo"), setting, zNodes);});</script></head><body><ul id="treeDemo" class="ztree"></ul><!-- 传递用户id值 --><input type="hidden" name="userId" value="${userId }"><input type="button" value="测试被选中的节点的id" οnclick="test();" /></body>
</body>
</html>

 2、后端

 1)实体类(采用JPA注解,mysql数据库)

//User.java
public class User implements Serializable{private Integer id;private String username;//用户名private String password;//密码private Set<Role>roles=new HashSet<Role>();//多对多#get、set方法

  

@Table(name="b_role")
@Entity
public class Role implements Serializable{private Integer rid;//自增Id序列private Integer id;//本身节点idprivate Integer pId;//父节点id,默认为0,是整个树的根private String name;//对应zTree树的name属性private Boolean isParent;//是否是父节点private Set<User>users=new HashSet<User>();#get、set方法......

 2)dao层

package sys.dao;
import java.util.List;import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;import sys.entity.Role;public interface RoleRepository extends JpaRepository<Role, Integer> {@Query("select r from Role r where pid = ?")List<Role>getRoles(int pid);@Query(value="select * from a_role r where r.id=:id",nativeQuery=true)Role getRoleById(@Param("id")Integer id);
}

  

package sys.dao;import org.springframework.data.jpa.repository.JpaRepository;import sys.entity.User;public interface UserRepository extends JpaRepository<User, Integer>{User getByUsernameAndPassword(String username,String password);User getByUsername(String username);}

 3)service层

package sys.service;import java.util.List;
import java.util.Map;
import java.util.Set;import sys.entity.Role;public interface RoleService {void save(Role role);List<Role>getAll();Role getRole(Integer rid);void delete(Integer id);List<Role> findAll();List<Role> getRoles(int pid);Role getRoleById(Integer id);Set<Role> getRolesInId(List<Integer> id_list);List<Map<String, Object>>queryByUserId(Integer userId);
}

  

//RoleServiceImpl实现queryByUserId方法
/*** zTree v3回显* 初始化化权限树* 拼接treeNode属性*/@Transactional(readOnly=true)@Overridepublic List<Map<String, Object>> queryByUserId(Integer userId) {//1、查出所有角色List<Role>listAll=roleRepository.findAll();//2、查出指定用户id的角色Set<Role>listOne=userRepository.getOne(userId).getRoles();//包装zTreeList<Map<String, Object>>list=new ArrayList<Map<String, Object>>();Map<String, Object>map=null;for(int i=0;i<listAll.size();i++){map=new HashMap<>();Role role=listAll.get(i);map.put("id", role.getId());map.put("pId", role.getpId());map.put("name", role.getName());map.put("isParent", role.getIsParent());//判断指定用户的角色是否在所有角色中包含,有则设置checked=true.if(listOne!=null&&listOne.size()>0&&listOne.contains(role)){map.put("checked",true);}else {map.put("checked",false);}list.add(map);}return list;}

  

package sys.controller;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.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;import sys.service.RoleService;
@RequestMapping("user")
@Controller
public class UserController {@Autowiredprivate RoleService roleService;@RequestMapping("getRoles")public String getRoles(){return "treedemo/demo1";}@RequestMapping("getRoles2")public String getRoles2(){return "treedemo/demo2";}/*** 根据用户id初始化权限树* @param userId* @return*/@ResponseBody@RequestMapping("role_list")public List<Map<String, Object>> getRolelist(@RequestParam("userId")Integer userId){return roleService.queryByUserId(userId);}
}

 3、测试

http://localhost:8080/treeDemo/user/getRoles2.do

 

 

 

转载于:https://www.cnblogs.com/hzhh123/p/5419361.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573667.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android应用安全开发之浅谈网页打开APP

一、网页打开APP简介 Android有一个特性&#xff0c;可以通过点击网页内的某个链接打开APP&#xff0c;或者在其他APP中通过点击某个链接打开另外一个APP&#xff08;AppLink&#xff09;&#xff0c;一些用户量比较大的APP&#xff0c;已经通过发布其AppLink SDK&#xff0c;开…

php微信拍照图库js接口,ThinkPHP微信实例——JSSDK图像接口多张图片上传下载并将图片流写入本地...

发布图片最多可添加9张作品发布wx.config({debug: false,appId: {$signPackage["appid"]},timestamp: {$signPackage["timestamp"]},nonceStr: {$signPackage["noncestr"]},signature: {$signPackage["signature"]},jsApiList: [// 所…

vue防抖和节流是什么_JavaScript防抖与节流,你知道多少?

JavaScript 的节流和防抖已经是老生畅谈的问题了&#xff0c;对于前端行业技术大牛来讲不过是小菜一碟&#xff0c;而对于绝大多数前端小白或初级工程师&#xff0c;绝对是必备的知识&#xff0c;值得学习。接下来小郭就带大家一起学习“防抖”与“节流”。防抖不知道大家第一次…

php中循环跳过,php for循环的exit / break / continue /goto 停止、跳过循环、继续循环...

php 与 JavaScript 有很多相似的地方&#xff1b; for循环中也有两个相同&#xff1b; 只是 php 比 js 多了一个 exit &#xff0c; 其他用法一样&#xff1b;for($i 1;$i<11;$i){if($i3){// exit; //当$i 3 代码停止运行&#xff0c;包括循环外的&#xff0c;后面的也停止运…

location php,Nginx服务器中的location配置详解

语法location [|~|~*|^~] /uri/ {...}规则 &#xff1a; 表示精确的URI匹配(有兴趣的同学可以看一下url和uri的区别)&#xff5e;&#xff1a; 表示区分大小写的正则匹配&#xff5e;*&#xff1a;表示不区分大小写的正则匹配!~ && !~*&#xff1a;表示区分大小写不匹…

java要频繁调用容器时_Java知识点梳理

1、Struts2和SpringMVC的区别(1)设计理念&#xff1a;前者为有状态的Action(均为多例)&#xff0c;Action对象属性字段承载请求、响应&#xff0c;后者一般为无状态的Controller&#xff0c;请求直接封装到方法的参数中&#xff1b;(2)集中访问点不同&#xff1a;都属于前端控制…

基于busybox的Linux小系统制作 (initrd)

我们有时候有需要在busybox基础上&#xff0c;制作linux&#xff0c;可是却不知道具体怎么做&#xff0c;这里将对基于busybox的linux小系统制作做出详细的步骤说明。准备环境&#xff1a;1、一个Redhat完整系统的虚拟机&#xff0c;本次实例使用的是Redhat Enterprise Linux 5…

Java异常持久化,Log4j进行日志的数据库持久化,说SQL语法异常。

Log4j进行日志的数据库持久化&#xff0c;说SQL语法错误。。。在properties的配置中。。。。log4j.appender.db org.apache.log4j.jdbc.JDBCAppenderlog4j.appender.db.BufferSize1log4j.appender.db.drivercom.mysql.jdbc.Driverlog4j.appender.db.URLjdbc:mysql://localhost…

实现光晕效果_马自达6车灯升级激光四透镜实现四近四远光

汽车前照明大灯升级案例车型&#xff1a;马自达6灯泡色温&#xff1a;5600K透镜案例&#xff1a;米石激光 TMF激光原车灯泡型号&#xff1a;H1 H1雾灯&#xff1a;H3原车瓦数&#xff1a;80-100W升级方式&#xff1a;支架安装方式&#xff1a;有密封胶性质&#xff1a;热LED解码…

matlab欧拉法程序,欧拉法matlab程序.doc

欧拉法matlab程序.doc 1.Euler法function[x,y]naeuler(dyfun,xspan,y0,h)xxspan(1):h:xspan(2);y(1)y0;forn1:length(x)-1y(n1)y(n)h*f(dyfun,x(n),y(n));endxx ;yy ;x10:0.2:1;y1(12*x1).^0.5;plot(x,y,x1,y1)>>dyfuninline( y-2*x/y );[x,y]naeuler(dyfun,[0,1],1,0.2)…

dns服务器v6解析 windows_04:缓存DNS、Split分离解析、电子邮件通信、Web服务器项目实战...

一、 环境的准备关闭两台虚拟机的SELinux[rootsvr7 ~]# setenforce 0 #修改当前运行模式[rootsvr7 ~]# getenforce #查看当前运行模式Permissive[rootsvr7 ~]# vim /etc/selinux/config #永久修改SELINUXpermissive设置两台虚拟机防火墙[rootsvr7 ~]# firewall-cmd …

linux查看php日志命令,linux查看日志的三种命令是什么,linux查看进程命令

linux查看日志的三种命令是什么Linux查看日志的三个命令是什么&#xff0c;linux查看日志有三个命令&#xff1a;1。查看实时更改日志&#xff0c;代码为[tail-f filename]&#xff1b;2.搜索关键字附近的日志代码为[cat-n filename | grep ‘ keyword ‘]&#xff1b;3.输入编…

控制器对应view生命周期

一、控制器view创建的六种方式 1.有没有同名xib创建2.通过 storyboard 创建3.有指定xib情况下创建4.有同名xib情况5.有同名去掉controll的情况6.loadveiw 二、创建控制器view的优先级三、控制器view加载顺序0、- (void)loadView …

jQuery全屏滚动插件fullPage.js

演 示 下 载 简介 如今我们经常能见到全屏网站&#xff0c;尤其是国外网站。这些网站用几幅很大的图片或色块做背景&#xff0c;再添加一些简单的内容&#xff0c;显得格外的高端大气上档次。比如 iPhone 5C 的介绍页面&#xff08;查看&#xff09;&#xff0c;QQ浏览器的官网…

simulink 解析udp数据_DNS 支持 TCP 和 UDP 双协议,但为何偏偏只钟情 UDP?

一、前言之前在聊到 App 网络优化时&#xff0c;聊到通过 HTTPDNS 替换掉传统的 DNS 解析&#xff0c;来达到网络优化的效果。其中提到 DNS 解析&#xff0c;是支持 UDP 和 TCP 双协议的。但是细心的朋友通过 wireshark、sniffer、tcpdump 等抓包工具分析&#xff0c;会发现基本…

php ip2long mysql,PHP基于ip2long实现IP转换整形

如何将四个字段以点分开的IP网络址协议地址转换成整数呢&#xff1f;PHP里有这么一个函数ip2long.比如echo ip2long("10.2.1.3");?>我们将得到167903491这是如何计算的&#xff0c;目前我知道有两个算法。其一function ip2int($ip){//我们先把ip分为四段,$ip1,$i…

查看你某条sql是哪个用户执行的_django_debug_toolbar:查看访问某个页面执行sql的详细...

django_debug_toolbar 是django的第三方工具包&#xff0c;给django扩展了调试功能&#xff0c;包括查看执行的sql语句&#xff0c;db查询次数&#xff0c;request&#xff0c;headers&#xff0c;调试概览等。1、官方推荐的安装方式是&#xff1a;pip install django-debug-to…

unzip 解压_每天一条Linux命令(11) unzip (超详细)

在Linux系统中&#xff0c;命令 unzip 用于解压zip命令或其他压缩软件压缩的zip格式文件。语法&#xff1a;unzip [选项] [压缩文件]常用参数说明&#xff1a;-o 解压时不提示是否覆盖文件-v 解压时显示详细信息-d 指定解压目录-l 不解压&#xff0c;只显示压缩文件内所包含的…

poi导出Excel(分行单元格颜色设置,字体设置,合并单元格,插入图片)

这是一个日报导出功能的代码;图片是用JfreeChars生成好的&#xff0c;话不多少 看代码 public String excelExport(HttpServletRequest request,HttpServletResponse response,CarSaledailyDTO carSaledailyDTO){//获取需要导出的报表数据     List<List<List>>…

vim 复制一行并且粘贴_Vim常用命令2之文本操作

文本操作无非增删改查&#xff0c;搜索&#xff0c;替换&#xff0c;复制粘贴&#xff0c;总结有如下命令&#xff08;正常模式下&#xff09;九四干&#xff1a;Vim常用命令1之移动光标​zhuanlan.zhihu.com1. 增1.1 行内插入i 光标之前插入I 行首插入a光标之后插入A 行末插入…