maven与layUI的权限设计

该项目展示了如何利用layUI框架构建一个权限管理系统,包括用户、角色和菜单的多对多关系管理。通过登录界面、用户管理、角色管理和数据管理等功能,实现了后台DAO、Util和Web层的交互。系统包含formSelects-v3.js插件以增强界面交互。

项目介绍

这次项目主要做的就是学会使用layUI做一个权限,可以适应于多个权限的使用,这里主要是3个角色,用户,角色,和菜单,实现多对多的关系,有两个中间的媒介,直接将表展示出来吧!

/*
MySQL Data Transfer
Source Host: localhost
Source Database: t_hgy
Target Host: localhost
Target Database: t_hgy
Date: 2019/7/10 ������ 23:27:12
*/

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for part
-- ----------------------------
DROP TABLE IF EXISTS `part`;
CREATE TABLE `part` (
  `part_id` int(20) NOT NULL AUTO_INCREMENT COMMENT '标识列,自增',
  `part_name` varchar(150) NOT NULL COMMENT '角色名',
  `description` varchar(255) DEFAULT NULL COMMENT '说明',
  `statu` int(255) DEFAULT '1' COMMENT '角色状态(1可以2不可用)',
  PRIMARY KEY (`part_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT;

-- ----------------------------
-- Table structure for part_and_permission
-- ----------------------------
DROP TABLE IF EXISTS `part_and_permission`;
CREATE TABLE `part_and_permission` (
  `part_id` bigint(20) NOT NULL COMMENT '角色id',
  `permission_id` bigint(20) NOT NULL COMMENT '菜单id'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT;

-- ----------------------------
-- Table structure for permission
-- ----------------------------
DROP TABLE IF EXISTS `permission`;
CREATE TABLE `permission` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '菜单id',
  `name` varchar(255) DEFAULT NULL COMMENT '菜单名',
  `url` varchar(255) DEFAULT NULL COMMENT '跳转路径',
  `pId` bigint(20) DEFAULT NULL COMMENT '父节点id',
  `type` int(255) DEFAULT NULL COMMENT '菜单类型  1菜单 2按钮',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT;

-- ----------------------------
-- Table structure for t_clazz
-- ----------------------------
DROP TABLE IF EXISTS `t_clazz`;
CREATE TABLE `t_clazz` (
  `cid` int(11) NOT NULL AUTO_INCREMENT,
  `cname` varchar(255) DEFAULT NULL,
  `cteachar` varchar(255) DEFAULT NULL,
  `pic` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '标识列,自增',
  `user_name` varchar(255) NOT NULL COMMENT '名称',
  `pwd` varchar(255) NOT NULL COMMENT '密码',
  `statu` bigint(255) NOT NULL DEFAULT '1' COMMENT '默认为1即可用,0为不可用',
  PRIMARY KEY (`user_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT;

-- ----------------------------
-- Table structure for user_and_part
-- ----------------------------
DROP TABLE IF EXISTS `user_and_part`;
CREATE TABLE `user_and_part` (
  `user_id` bigint(20) NOT NULL COMMENT '管理人员id',
  `part_id` bigint(20) NOT NULL COMMENT '角色id'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT;

-- ----------------------------
-- Records 
-- ----------------------------
INSERT INTO `part` VALUES ('15', '普通用户', '只能进行普通数据的管理,不能进行用户和角色的管理', '1');
INSERT INTO `part` VALUES ('17', '超级管理员', '角色,用户,普通数据的管理', '1');
INSERT INTO `part` VALUES ('19', '胡桂云123', '爱的色放三', '0');
INSERT INTO `part_and_permission` VALUES ('17', '1');
INSERT INTO `part_and_permission` VALUES ('17', '2');
INSERT INTO `part_and_permission` VALUES ('17', '3');
INSERT INTO `part_and_permission` VALUES ('17', '4');
INSERT INTO `part_and_permission` VALUES ('17', '5');
INSERT INTO `part_and_permission` VALUES ('19', '4');
INSERT INTO `part_and_permission` VALUES ('19', '5');
INSERT INTO `part_and_permission` VALUES ('15', '4');
INSERT INTO `part_and_permission` VALUES ('15', '5');
INSERT INTO `permission` VALUES ('1', '权限管理', null, '0', '1');
INSERT INTO `permission` VALUES ('2', '用户管理', '/userManagement.jsp', '1', '1');
INSERT INTO `permission` VALUES ('3', '角色管理', '/partManagement.jsp', '1', '1');
INSERT INTO `permission` VALUES ('4', '普通数据', null, '0', '1');
INSERT INTO `permission` VALUES ('5', '普通数据管理', '/Clazz.jsp', '4', '1');
INSERT INTO `t_clazz` VALUES ('1', 'T224', '李晓', '东方故事');
INSERT INTO `t_clazz` VALUES ('2', 'T225', '小四', '阿斯蒂芬');
INSERT INTO `t_clazz` VALUES ('3', 'T226', '李晓', '散打');
INSERT INTO `user` VALUES ('38', 'admin', '123', '1');
INSERT INTO `user` VALUES ('39', '胡桂云', '123', '1');
INSERT INTO `user_and_part` VALUES ('38', '17');
INSERT INTO `user_and_part` VALUES ('39', '15');

目录结构

这里需要说一下那个formSelects-v3.js是layUI的一个插件,用户界面角色下拉框
在这里插入图片描述

文件配置

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.hu</groupId>
  <artifactId>T224</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>T224 Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
   
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    
   <!--servlet依赖 -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
			<scope>provided</scope>
		</dependency>

		<!-- mySql 依赖 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.44</version>
		</dependency>


		<!-- 引用struts2框架核心依赖 -->
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-core</artifactId>
			<version>2.5.16</version>
		</dependency>

		<!-- hutoll工具包 -->
		<dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-all</artifactId>
			<version>4.5.16</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.47</version>
		</dependency>
  </dependencies>
  <build>
    <finalName>T224</finalName>
    
    
      <plugins>
    	<plugin>
    		<groupId>org.apache.maven.plugins</groupId>
    		<artifactId>maven-compiler-plugin</artifactId>
    		<version>3.7.0</version>
    		<configuration>
    			<source>1.8</source>
    			<target>1.8</target>
    			<encoding>UTF-8</encoding>
    		</configuration>
    	</plugin>
    </plugins>
    
    
  </build>
</project>

wab.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
  <display-name>Archetype Created Web Application</display-name>
  
  
  <filter>
 	<filter-name>EncodingFiter</filter-name>
 	<filter-class>com.crud.util.EncodingFiter</filter-class>
 </filter>
 <filter-mapping>
 	<filter-name>EncodingFiter</filter-name>
 	<url-pattern>/*</url-pattern>
 </filter-mapping>
 
 
  <filter>
  	<filter-name>struts2</filter-name>
  	<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>struts2</filter-name>
  	<url-pattern>*.action</url-pattern>
  </filter-mapping>
  
  
  
  
  
  
  
</web-app>

前台代码

登录的login.jsp 与login.js

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
    <link rel="stylesheet" href="${pageContext.request.contextPath}/static/js/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="${pageContext.request.contextPath }/static/js/css/login.css">
    <script src="${pageContext.request.contextPath }/static/js/layui/layui.all.js"></script>
   
    <style>
        video {
            object-fit: fill;
            width: 1420px;
            height: 700px;
        }
    </style>
</head>
<body>

	<input type="hidden" id="path" value="${pageContext.request.contextPath}">
	
	<video class="video-player" preload="auto" autoplay="autoplay" loop="loop" data-height="1080"
	       width="1920">
	    <!---->
	    <source src="${pageContext.request.contextPath }/static/admin/mv.mp4" type="video/mp4">
	</video>
	
	<div class="video_mask"></div>
	<div class="login">
	    <h1>管理员登录</h1>
	    <form class="layui-form">
	        <div class="layui-form-item">
	            <input class="layui-input" id="user_name" name="user_name" placeholder="用户名" value=""
	                   lay-verify="required" lay-verType="tips" type="text" autocomplete="off">
	        </div>
	        <div class="layui-form-item">
	            <input class="layui-input" id="pwd" name="pwd" placeholder="密码" value=""
	                   lay-verify="required" lay-verType="tips" type="password" autocomplete="off">
	        </div>
	        <button class="layui-btn login_btn" lay-submit="" lay-filter="login">登录</button>
	    </form>
	</div>
	
	 <script src="${pageContext.request.contextPath }/static/js/login.js"></script>
	 
</body>
</html>

login.js

layui.config({
    base: "static/js/"
}).use(['form', 'layer'], function () {
    var form = layui.form,
        layer = parent.layer === undefined ? layui.layer : parent.layer,
        $ = layui.jquery;
    //获取绝对路径
    var path = $("#path").val();
    //登录按钮事件
    form.on("submit(login)", function (data) {
        // $.ajaxSettings.async = false;
        $.post(path + "/sy/userAction_login.action", {
            user_name: $('#user_name').val(),
            pwd: $('#pwd').val()
        }, function (data) {
        	console.log(data);
            if (data > 0) {//登录成功
                layer.msg("登录成功", {icon:1,time: 1000}, function () {
                    parent.location.href = path + '/index.jsp';
                })
            } else {
                layer.msg("登录失败,帐号或密码错误或帐号不可用", {icon:2,time: 1000}, function () {
                })
            }

        })
        return false;
    })
});

function refreshCode() {
    var captcha = document.getElementById("captcha");
    captcha.src = "/captcha.jpg?t=" + new Date().getTime();
}


用户管理和js

usermanagement.jsp

<%@ 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">
<link rel="stylesheet"
	href="${pageContext.request.contextPath}/static/js/layui/css/layui.css"
	media="all">
<script type="text/javascript"
	src="${pageContext.request.contextPath}/static/js/jquery-3.3.1.js"></script>
<script type="text/javascript"
	src="${pageContext.request.contextPath}/static/js/layui/layui.js"></script>

</head>
<body>
	<input type="hidden" id="path"
		value="${pageContext.request.contextPath}" />

	<!--搜索维度-->
	<div class="layui-form">
		<div class="layui-form-item">
			<label class="layui-form-label">用户名</label>
			<div class="layui-input-inline">
				<input type="text" id='user_name' name="user_name"
					lay-verify="required" placeholder="请输入用户名" autocomplete="true"
					class="layui-input">
			</div>
			<label class="layui-form-label">角色</label>
			<div class="layui-input-inline">
				<select xm-select="user_part_id" xm-select-type="2"
					id="user_part_id" xm-select-skin="primary">
				</select>
			</div>
			<button class="layui-btn" data-type="reload">查询</button>
			<button class="layui-btn layui-btn-danger" data-type="add">新建</button>
		</div>
	</div>
	<!--显示数据的表格-->
	<div class="demoTable">
		<div class=layui-form>
			<table class="layui-table" id="LAY_table_user" lay-filter="user"
				lay-data="{id: 'idTest'}">
			</table>
		</div>
	</div>

	<!--弹出层-->
	<div class="site-text" style="margin: 5%; display: none" id="box1"
		target="test123">
		<form method="post" class="layui-form layui-form-pane"
			onsubmit="return false" id="users">
			<div class="layui-form-item">
				<label class="layui-form-label">用户名</label>
				<div class="layui-input-block">
					<input type="text" class="layui-input text_add" id="user_names"
						name=user_names>
				</div>
				<br> <label class="layui-form-label"> 用户密码</label>
				<div class="layui-input-block">
					<input type="password" class="layui-input" id="pwd" name=pwd><br>
				</div>
			</div>
			<label class="layui-form-label">选择角色</label>
			<div class="layui-input-block">
				<select xm-select="user_part_ids" xm-select-type="2"
					id="user_part_ids" xm-select-skin="primary">
				</select>
			</div>
		</form>
	</div>
	
	<!--按钮菜单-->
	<script type="text/html" id="barDemo">
    {{#  if(d.statu==0){ }}
    <a class="layui-btn layui-btn-xs layui-btn-warm" lay-event="begin">启用</a>
    <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
    {{#  }else{ }}
    <a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="end">禁用</a>
    <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
    {{#  } }}	
	</script>
	<script src="${pageContext.request.contextPath}/static/js/userManagement.js"></script>
</body>
</HTML>


usermanagement.js

var path = document.getElementById("path").value;

layui.config({
	base : path + '/static/js/' // 此处写的相对路径, 实际以项目中的路径为准
}).extend({
	formSelects : 'formSelects-v3'
});

// 用户管理
layui
		.use(
				[ 'table', 'form', 'jquery', 'formSelects' ],
				// , 'from'
				function() {
					var table = layui.table, form = layui.form, formSelects = layui.formSelects;
					// 第一个实例
					table.render({
						elem : '#LAY_table_user',
						// height: 300,
						url : path + '/sy/userAction_query.action'// 数据接口
						,
						// defaultToolbar : [ 'filter', 'print', 'exports' ],
						page : true // 开启分页
						,
						limit : 10,
						limits : [ 5, 10, 15 ],
						cellMinWidth : 80,
						cols : [ [ {
							field : 'user_id',
							title : '编号',
							sort : true,
						// width: 80,
						}, {
							field : 'user_name',
							title : '用户名',
						// width: 80,
						}, {
							field : 'part_names',
							title : '角色',
						// width: 180,
						}, {
							fixed : 'right',
							title : '操作',
							align : 'center',
							toolbar : '#barDemo'
						} ] ],
						id : 'testReload',

					});
					table.on('checkbox(user)', function(obj) {
						console.log(obj)
					});

					// 上方菜单
					var $ = layui.$, active = {
						// 查询
						reload : function() {
							// 执行重载
							table.reload('testReload', {
								page : {
									curr : 1
								// 重新从第 1 页开始
								},
								where : {
									user_name : $('#user_name').val(),
									part_ids : formSelects.value(
											'user_part_id', 'valStr')
								}
							});
						},
						add : function() { // 添加
							$('#user_names').prop('disabled', false)// 设置可用
							$('#user_names').removeClass('layui-disabled')
							layer.open({
								type : 1,
								title : '添加用户',
								maxmin : true,
								shadeClose : true, // 点击遮罩关闭层
								area : [ '80%', '80%' ],
								content : $('#box1'),
								btn : [ '确定', '取消' ],
								success : function(layero, index) {// 弹出后执行的函数
									formSelects.value('user_part_ids', []);
								},
								yes : function(index, layero) {// 确定执行函数

									// 执行添加方法
									$.post(path
											+ '/sy/userAction_add.action', {
										user_name : $('#user_names').val(),// 用户名
										pwd : $('#pwd').val(),// 密码
										part_ids : formSelects.value(
												"user_part_ids", 'valStr')
									}, function(data) {
										if (data > 0) {
											layer.alert('添加成功', {
												icon : 1,
												title : '提示'
											}, function(i) {
												layer.close(i);
												layer.close(index);// 关闭弹出层
												$("#users")[0].reset()// 重置form
											})
											table.reload('testReload', {// 重载表格
												page : {
													curr : 1
												// 重新从第 1 页开始
												}
											})
										} else if (data == -2) {
											layer.msg('添加失败,用户名不能重复')
										} else {
											layer.msg('添加失败')
										}
									})

								},
								cancel : function(index, layero) {
									$("#users")[0].reset()// 重置form
									layer.close(index)
								}
							});
						}
					}
					$('.layui-form .layui-btn').on('click', function() {
						var type = $(this).data('type');
						active[type] ? active[type].call(this) : '';
					});

					// table菜单
					table.on('tool(user)', function(obj) {
						var data = obj.data;// 获得当前行数据
						var layEvent = obj.event; // 获得 lay-event
													// 对应的值(也可以是表头的event参数对应的值)
						var tr = obj.tr; // 获得当前行 tr 的DOM对象
						if (layEvent == 'edit') {// 编辑
							layer.open({
								type : 1,
								title : '编辑用户',
								maxmin : true,
								shadeClose : true, // 点击遮罩关闭层
								area : [ '80%', '80%' ],
								content : $('#box1'),
								btn : [ '确定', '取消' ],
								success : function(layero, index) {// 弹出后执行的函数
									$('#pwd').val(data.pwd);
									$('#user_names').val(data.user_name);
									formSelects.value('user_part_ids', []);
									formSelects.value('user_part_ids',
											data.part_ids.split(","));
								},
								yes : function(index, layero) {// 确定回调函数
									$.ajaxSettings.async = false;
									$.post(path
											+ '/sy/userAction_edit.action', {
										pwd : $('#pwd').val(),
										user_id : data.user_id,
										user_name : $("#user_names").val(),
										part_ids : formSelects.value(
												"user_part_ids", 'valStr')
									}, function(data) {
										if (data > 0) {
											layer.alert('编辑成功', {
												icon : 1,
												title : '提示'
											}, function(i) {
												layer.close(i);
												layer.close(index);// 关闭弹出层
												$("#users")[0].reset()// 重置form
											})
											table.reload('testReload', {// 重载表格
												page : {
													curr : 1
												// 重新从第 1 页开始
												}
											})
										} else if (data = -2) {
											layer.msg('用户名重复')
										} else {
											layer.msg('编辑失败')
										}
									})
								},
								cancel : function(index, layero) {
									$("#users")[0].reset()// 重置form
									layer.close(index)
								}
							})
						} else if (layEvent == 'begin') {// 启用
							layer.confirm('确定启用吗???', {
								icon : 3,
								title : '提示'
							}, function(index) {
								$.post(path
										+ '/sy/userAction_eidtStatu.action', {
									user_id : data.user_id,
									statu : 1
								}, function(data) {
									layer.close(index);
									table.reload('testReload', {
										page : {
											curr : 1
										// 重新从第 1 页开始
										}
									})
								});
							})
						} else if (layEvent == 'end') {// end//禁用
							layer.confirm('确定禁用吗???', {
								icon : 3,
								title : '提示'
							}, function(index) {
								$.post(path
										+ '/sy/userAction_eidtStatu.action', {
									user_id : data.user_id,
									statu : 0
								}, function(data) {
									layer.close(index);
									table.reload('testReload', {
										page : {
											curr : 1
										// 重新从第 1 页开始
										}
									})
								});
							})
						} else if (layEvent == 'del') {// 删除
							layer.confirm('确定删除吗???', {
								icon : 3,
								title : '提示'
							}, function(index) {
								$.post(
										path + '/sy/userAction_remove.action',
										{
											user_id : data.user_id
										}, function(data) {
											layer.close(index);
											table.reload('testReload', {
												page : {
													curr : 1
												// 重新从第 1 页开始
												}
											})
										});
							})
						}
					});
				});

/**
 * 搜索下拉框角色加载
 */
function part() {
	$.ajaxSettings.async = false
	$.getJSON(path + '/sy/partAction_select.action', {}, function(data) {
		var html = "<option value=''>直接选择或搜索选择</option>";
		// 返回处理的方法
		$.each(data, function(index, item) {
			html += "<option value=" + item.part_id + ">" + item.part_name
					+ "</option>";
		});
		$('#user_part_id').html(html);
		$('#user_part_ids').html(html);
	})
}

part();

角色管理和js

partmanagement.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>角色管理</title>
<link rel="stylesheet"
	href="${pageContext.request.contextPath}/static/js/layui/css/layui.css"
	media="all">
<script type="text/javascript"
	src="${pageContext.request.contextPath}/static/js/jquery-3.3.1.js"></script>
<script type="text/javascript"
	src="${pageContext.request.contextPath}/static/js/layui/layui.js"></script>
<link rel="stylesheet"
	href="${pageContext.request.contextPath}/static/zTree/css/metroStyle/metroStyle.css"
	type="text/css">
<script type="text/javascript"
	src="${pageContext.request.contextPath}/static/zTree/js/jquery.ztree.core.js"></script>
<script type="text/javascript"
	src="${pageContext.request.contextPath}/static/zTree/js/jquery.ztree.excheck.js"></script>

</head>
<body>
	<input type="hidden" id="path"
		value="${pageContext.request.contextPath}">

	<!--搜索维度-->
	<div class="layui-form">
		<div class="layui-form-item">
			<label class="layui-form-label">角色名</label>
			<div class="layui-input-inline">
				<input type="text" id='part_name' name="part_name"
					lay-verify="required" placeholder="请输入角色名" autocomplete="true"
					class="layui-input">
			</div>
			<button class="layui-btn" data-type="reload">查询</button>
			<button class="layui-btn layui-btn-danger" data-type="add">新建</button>
		</div>
	</div>

	<!--显示数据的表格-->
	<div class="demoTable">
		<div class=layui-form>
			<table class="layui-table" id="LAY_table_user" lay-filter="user"
				lay-data="{id: 'idTest'}">
			</table>
		</div>
	</div>

	<!--弹出层-->
	<div class="site-text" style="margin: 5%; display: none" id="box1"
		target="test123">
		<form class="layui-form layui-form-pane" onsubmit="return false"
			id="users">
			<div class="layui-form-item">
				<label class="layui-form-label">角色名</label>
				<div class="layui-input-block">
					<input type="text" class="layui-input" id="part_names"
						name=part_names>
				</div>
				<br> <label class="layui-form-label"> 角色说明</label>
				<div class="layui-input-block">
					<input type="text" class="layui-input" id="description"
						name=description><br>
				</div>
			</div>
		</form>
	</div>

	<!--权限-->
	<div class="site-text layui-form" style="margin: 5%; display: none"
		id="box3" target="test1232">
		<div class="content_wrap">
			<div class="zTreeDemoBackground left">
				<ul id="treeDemo" class="ztree"></ul>
			</div>
			<div class="right" style="display: none;">
				<ul class="info">
					<li class="title">
						<ul class="list">
							<li><input type="checkbox" id="py" class="checkbox first"
								checked /> <input type="checkbox" id="sy"
								class="checkbox first" checked /> <input type="checkbox"
								id="pn" class="checkbox first" checked /> <input
								type="checkbox" id="sn" class="checkbox first" checked /></li>
						</ul>
					</li>
				</ul>
			</div>
		</div>
	</div>

	<!--按钮菜单-->
	<script type="text/html" id="barDemo">
    {{#  if(d.statu==0){ }}
    <a class="layui-btn layui-btn-xs layui-btn-warm" lay-event="begin">启用</a>
    <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
    {{#  }else{ }}
    <a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="end">禁用</a>
    <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
    <a class="layui-btn  layui-btn-xs" lay-event="right">角色权限</a>
    {{#  } }}
	</script>
	
	<script src="${pageContext.request.contextPath}/static/js/partManagement.js"></script>
</body>
</html>

partmanagement.js

var path = document.getElementById("path").value;

// 角色管理
layui.use([ 'table', 'form' ],
// , 'from'
function() {
	var table = layui.table;
	// 第一个实例
	table.render({
		elem : '#LAY_table_user',
		// height: 300,
		url : path + '/sy/partAction_query.action',// 数据接口
		// defaultToolbar : [ 'filter', 'print', 'exports' ],
		page : true // 开启分页
		,
		limit : 10,
		limits : [ 5, 10, 15 ],
		cellMinWidth : 80,
		cols : [ [ {
			field : 'part_id',
			title : '编号',
			sort : true,
		// width: 80,
		}, {
			field : 'part_name',
			title : '角色名',
		// width: 80,
		}, {
			field : 'description',
			title : '角色说明',
		}, {
			fixed : 'right',
			title : '操作',
			align : 'center',
			toolbar : '#barDemo'
		} ] ],
		id : 'testReload',

	});
	table.on('checkbox(user)', function(obj) {
		console.log(obj)
	});
	// 上方菜单
	var $ = layui.$, active = {
		// 查询
		reload : function() {
			var part_name = $('#part_name');// 角色名
			// 执行重载
			table.reload('testReload', {
				page : {
					curr : 1 // 重新从第 1 页开始
				},
				where : {
					key : 'part_name',
					part_name : part_name.val(),
				}
			});
		},
		add : function() { // 添加
			layer.open({
				type : 1,
				title : '添加角色',
				maxmin : true,
				shadeClose : true, // 点击遮罩关闭层
				area : [ '80%', '80%' ],
				content : $('#box1'),
				btn : [ '确定', '取消' ],
				yes : function(index, layero) {// 确定执行函数
					// 执行添加方法
					$.post(path + '/sy/partAction_add.action', {
						part_name : $('#part_names').val(),// 角色名
						description : $('#description').val(),// 角色说明
					}, function(data) {
						if (data > 0) {
							layer.alert('添加成功', {
								icon : 1,
								title : '提示'
							}, function(i) {
								layer.close(i);
								layer.close(index);// 关闭弹出层
								$("#users")[0].reset()// 重置form
							})
							table.reload('testReload', {// 重载表格
								page : {
									curr : 1
								// 重新从第 1 页开始
								}
							})
						} else {
							layer.msg('添加失败')
						}
					})

				},
				cancel : function(index, layero) {
					$("#users")[0].reset()// 重置form
					layer.close(index)
				}
			});
		}
	}
	$('.layui-form .layui-btn').on('click', function() {
		var type = $(this).data('type');
		active[type] ? active[type].call(this) : '';
	});

	// table菜单
	table.on('tool(user)', function(obj) {
		var data = obj.data;// 获得当前行数据
		var layEvent = obj.event; // 获得 lay-event 对应的值(也可以是表头的event参数对应的值)
		var tr = obj.tr; // 获得当前行 tr 的DOM对象
		if (layEvent == 'edit') {// 编辑
			layer.open({
				type : 1,
				title : '编辑角色',
				maxmin : true,
				shadeClose : true, // 点击遮罩关闭层
				area : [ '80%', '80%' ],
				content : $('#box1'),
				btn : [ '确定', '取消' ],
				success : function(layero, index) {// 弹出后执行的函数
					$('#part_names').val(data.part_name);
					$('#description').val(data.description);
					layui.form.render('select');
				},
				yes : function(index, layero) {// 确定回调函数
					$.ajaxSettings.async = false;
					$.post(path + '/sy/partAction_eidt.action', {
						part_name : $('#part_names').val(),
						description : $('#description').val(),
						part_id : data.part_id
					}, function(data) {
						if (data > 0) {
							layer.alert('编辑成功', {
								icon : 1,
								title : '提示'
							}, function(i) {
								layer.close(i);
								layer.close(index);// 关闭弹出层
								$("#users")[0].reset()// 重置form
							})
							table.reload('testReload', {// 重载表格
								page : {
									curr : 1 // 重新从第 1 页开始
								}
							})
						} else if (data == -2) {
							layer.msg('角色名称重复')
						} else {
							layer.msg('编辑失败')
						}
					})
				},
				cancel : function(index, layero) {
					$("#users")[0].reset()// 重置form
					layer.close(index)
				}
			})
		} else if (layEvent == 'begin') {// 启用
			layer.confirm('确定启用吗???', {
				icon : 3,
				title : '提示'
			}, function(index) {
				$.getJSON(path + '/sy/partAction_eidtStatu.action', {
					part_id:data.part_id,
					statu:1
				}, function(data) {
					layer.close(index);
					table.reload('testReload', {
						page : {
							curr : 1
						// 重新从第 1 页开始
						}
					})
				});
			})
		} else if (layEvent == 'end') {// end//禁用
			layer.confirm('确定禁用吗???', {
				icon : 3,
				title : '提示'
			}, function(index) {
				$.getJSON(path + '/sy/partAction_eidtStatu.action', {
					part_id:data.part_id,
					statu:0
				}, function(data) {
					layer.close(index);
					table.reload('testReload', {
						page : {
							curr : 1 // 重新从第 1 页开始
						}
					})
				});
			})
		} else if (layEvent == 'del') {// 删除
			layer.confirm('确定删除吗???', {
				icon : 3,
				title : '提示'
			}, function(index) {
				$.getJSON(path + '/sy/partAction_remove.action', {
					part_id : data.part_id
				}, function(data) {
					layer.close(index);
					table.reload('testReload', {
						page : {
							curr : 1
						// 重新从第 1 页开始
						}
					})
				});
			})
		} else if (layEvent == 'right') {// 角色权限
			layer.open({
				type : 1,
				title : '角色权限',
				maxmin : true,
				shadeClose : true, // 点击遮罩关闭层
				area : [ '60%', '95%' ],
				content : $('#box3'),
				btn : [ '确定', '取消' ],
				success : function(layero, index) {
					$.getJSON(path + '/sy/permissionAction_getPartTree.action', {
						part_id : data.part_id
					}, function(data) {
						zTreeObj = $.fn.zTree.init($("#treeDemo"), setting, data);
						setCheck();
						$("#py").bind("change", setCheck);
						$("#sy").bind("change", setCheck);
						$("#pn").bind("change", setCheck);
						$("#sn").bind("change", setCheck);
					});
				},
				yes : function(index, layero) {
					nodes = zTreeObj.getCheckedNodes(true);
					var permissionIds = "";
					for (var i = 0; i < nodes.length; i++) {
						permissionIds += "," + nodes[i].id;
					}
					if(permissionIds.length > 0){						
						permissionIds = permissionIds.substring(1);
					}
		
				
					$.getJSON(path + '/sy/permissionAction_partPermissionBinding.action', {
						part_id : data.part_id,
						permissionIds:permissionIds
					}, function(data) {
						layer.close(index);
						table.reload('testReload', {
							page : {
								curr : 1 // 重新从第 1 页开始
							}
						})
					});
					
				}
			});
		}
	});
});


var setting = {
	check : {
		enable : true
	},
	data : {
		simpleData : {
			enable : true
		}
	}
};


var code;

function setCheck() {
	var zTree = $.fn.zTree.getZTreeObj("treeDemo"), py = $("#py").attr(
			"checked") ? "p" : "", sy = $("#sy").attr("checked") ? "s" : "", pn = $(
			"#pn").attr("checked") ? "p" : "", sn = $("#sn").attr("checked") ? "s"
			: "", type = {
		"Y" : py + sy,
		"N" : pn + sn
	};
	zTree.setting.check.chkboxType = type;
}


数据管理和js

Clazz.jsp

<%@ 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>Struts 实现CURD</title>

<link rel="stylesheet" href="${pageContext.request.contextPath }/static/js/layui/css/layui.css"/>
<script type="text/javascript" src="${pageContext.request.contextPath }/static/js/layui/layui.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/static/js/jquery-3.3.1.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/static/js/Clazz.js"></script>

</head>
<body class="child-body">

	<!--隐藏域传值  -->
	<input type="hidden" id="path"
		value="${pageContext.request.contextPath}">
		
	<blockquote class="layui-elem-quote">
		<!--搜索框-->
		<div class="layui-form">
			<div class="layui-form-item">
				<label class="layui-form-label">名字:</label>
				<div class="layui-input-inline">
					<input type="text" id='searchName' name="searchName"
						lay-verify="required" placeholder="请输入名字" autocomplete="true"
						class="layui-input">
				</div>
				<button class="layui-btn layui-btn-normal layui-btn-radius"
					data-type="reload">
					<i class="layui-icon">&#xe615;</i>查询
				</button>
				<button class="layui-btn layui-btn-normal" data-type="add">新建</button>
			</div>
		</div>
	</blockquote>

	<!--根据table id 来展示表格数据  -->
	<table class="layui-hide" id="strutsClassTable" lay-filter="test"></table>
	
	<!--行内样式按钮   -->
	<script type="text/html" id="lineBtns">
  		<a class="layui-btn layui-btn-xs" lay-event="edit"><i class="layui-icon">&#xe642;</i>编辑</a>
 		<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
	</script>
	
	
	<!--弹出层  增改通用-->
	 <div class="site-text" style="margin: 5%; display: none" id="box1"  target="test123">
	    <form class="layui-form layui-form-pane" method="post" onsubmit="return false" id="myFrom">
	        <div class="layui-form-item">
	            <label class="layui-form-label"> 名字</label>
	            <div class="layui-input-block">
	                <input type="text" class="layui-input"  id="cname"  name=cname><br>
	            </div>
	              <label class="layui-form-label">信息</label>
	            <div class="layui-input-block">
	                <input type="text" class="layui-input"  id="cteachar"  name=cteachar><br>
	            </div>
	               <label class="layui-form-label">图片</label>
	            <div class="layui-input-block">
	                <input type="text" class="layui-input"  id="pic"  name=pic><br>
	            </div>
	        </div>
	    </form>
	</div> 
</body>
</html>

Clazz.js

//执行渲染
layui.use(['table','layer','form'],function(){
	//定义通用全局变量
	var path=document.getElementById("path").value;
	var table =layui.table;
	var layer=layui.layer;
	var form = layui.form;
    var $ = layui.$;
	
    //展示数据表格(数据表格初始化)
	table.render({
		 elem:'#strutsClassTable'//表格id
		,url:path+'/sy/strutsClassAction_query.action'//所对应调用的接口
		,method:'post'		//提交方式
	    ,cols:[[
	    	/*根据数据库的表格所对应的名称  */
	         {field:'cid',height:80, width:300, title: '编号'}
	         ,{field:'cname', height:80,width:300, title: '名字'}
	         ,{field:'cteachar',height:80, width:300, title: '信息'}
	         ,{field:'pic',height:80, width:300, title: '图片'}
	         ,{field:'right',height:80, width:300, title: '操作', toolbar:'#lineBtns'}//操作栏
	    ]]
	    ,page:'true'//分页
	    , id: 'testReload'
	});
	
	
    
    //查询和新增事件触发
    var active = {
            //查询
            reload: function () {
                var cname = $('#searchName').val();//获取查询内容
                // 执行重载
                table.reload('testReload', {
                    page: {
                        curr: 1// 从第1页开始展示查询结果
                    },
                    where: {
                        key: 'cname',
                        cname: cname
                    }
                });
            }, 
            add: function () { //添加
                layer.open({//弹出框
                    type: 1,
                    title: '添加信息',
                    maxmin: true,
                    shadeClose: true, //点击遮罩关闭层
                    area: ['60%', '55%'],
                    content: $('#box1'),
                    btn: ['确定', '取消'],
                    //当点击确定触发回掉
                    yes: function (index, layero) {//确定执行函数
                        //通过向后台返回ajax请求来添加数据
                        $.post(path+"/sy/strutsClassAction_add.action", {
                        	//携带参数
                        	cname:$("#cname").val(),
                        	cteachar:$("#cteachar").val(),
                        	pic:$("#pic").val()
                        }, function (data) {
                        	/*根据后台返回的参数来进行判断是否添加成功 */
                            if (data >  0) {
                            	//弹出提示层
                                layer.alert('添加成功', {icon: 1, title: '提示'}, function (i) {
                                    layer.close(i);
                                    layer.close(index);//关闭弹出层
                                    $("#myFrom")[0].reset()//重置form
                                })
                                //重载表格
                                table.reload('testReload', {
                                    page: {
                                        curr: 1// 重新从第 1 页开始
                                    }
                                })
                            } else{
                            	//提示添加失败
                                layer.msg('添加失败')
                            }
                        })

                    }, cancel: function (index, layero) {//取消
                    	//当点击取消按钮
                        $("#myFrom")[0].reset()//重置form  根据id
                        layer.close(index)
                    }
                });
            }
    }
    
    //这是事件的通用触发
    $('.layui-form .layui-btn').on('click', function () {
        var type = $(this).data('type');
        active[type] ? active[type].call(this) : '';
    });
	
	
	
	/*表格 行内操作(编辑  以及  删除 按钮操作)  */
	table.on('tool(test)', function(obj){
	         var data = obj.data; //获得当前行数据
	         var tr=obj.tr//活动当前行tr 的  DOM对象
	         var layEvent = obj.event; //获取操作状态 修改和删除
	         
	         if(layEvent === 'del'){ //删除
	             layer.confirm('确定删除吗?',{title:'删除'}, function(index){
	                 //向服务端发送删除指令og
	                 $.post(path+'/sy/strutsClassAction_remove.action',{cid:data.cid}, function(ret){
	                         layer.close(index);//关闭弹窗
	                         table.reload('testReload', {//重载表格
	                             page: {
	                                 curr: 1// 重新从第 1 页开始
	                             }
	                         })
	                 });
	                 layer.close(index);
	             });
	         } else if(layEvent === 'edit'){ //编辑
	             layer.open({
	            	 type: 1,
	                 title: '修改信息',
	                 maxmin: true,
	                 shadeClose: true, //点击遮罩关闭层
	                 area: ['60%', '55%'],
	                 content: $('#box1'),
	                 btn: ['确定', '取消']
	                 ,content:$('#box1')  //弹窗id
	                 ,success:function(layero,index){
	                	 //数据绑定
		                 $('#cname').val(data.cname);
		                 $('#cteachar').val(data.cteachar);
		                 $("#pic").val(data.pic);
	                 },yes:function(index,layero){
	                	//确定修改回掉
	                	  $.post(path+'/sy/strutsClassAction_eidt.action',{
	                			//携带参数
	                        	cname:$("#cname").val(),
	                        	cteachar:$("#cteachar").val(),
	                        	pic:$("#pic").val(),
	                        	cid:data.cid
	                	  },function(data){
	                	  //根据后台返回的参数,来进行判断
	                		  if(data>0){
	                			  layer.alert('编辑成功',{icon:1,title:'提示'},function(i){
	                				  layer.close(i);
	                                  layer.close(index);//关闭弹出层
	                                  $("#myFrom")[0].reset()//重置form
	                			  })
	                			  table.reload('testReload',{//重载表格
	                				  page:{
	                					  curr:1
	                				  }
	                			  })
	                		  }
	                	  });
	                 }
	               
	             
	             });
	         }
	    });  
});


后台代码

在这里我就没有展示实体类了,

dao

普通数据dao

package com.crud.dao;


import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import com.crud.entity.Clazz;
import com.crud.util.BaseDao;
import com.crud.util.JsonBaseDao;
import com.crud.util.JsonUtils;
import com.crud.util.PageBean;
import com.crud.util.StringUtils;

/**
 * 普通数据
 * @author Administrator
 *
 */
public class dao extends JsonBaseDao {
	/**
	 *查询
	 * @param paMap
	 * @param pageBean
	 * @return
	 * @throws Exception
	 */
	public List<Map<String, Object>> query(Map<String, String[]> paMap, PageBean pageBean) throws Exception {
		String sql = "select * from t_clazz where true ";
		String cname = JsonUtils.getParamVal(paMap, "cname");
		// 是否带名称查询
		if (StringUtils.isNotBlank(cname)) {
			sql = sql + " and cname  like '%" + cname + "%'";
		}
		String cid = JsonUtils.getParamVal(paMap, "cid");
		// 带id查询
		if (StringUtils.isNotBlank(cid)) {
			sql = sql + " and cid  = " + cid ;
		}
		
		return super.executeQuery(sql, pageBean);
	}
	
	
	
	
	/**
	 *修改
	 * 
	 * @param paMap
	 * @return
	 * @throws Exception
	 */
	public int eidt(Map<String, String[]> paMap) throws Exception {
		String sql = "update t_clazz set cname = ?, cteachar = ?, pic = ? where cid = ?";
		return super.executeUpdate(sql, new String[] {"cname", "cteachar", "pic", "cid"}, paMap);
	}

	
	
	/**
	 *删除
	 * @param paMap
	 * @return
	 * @throws Exception
	 */
	public int remove(Map<String, String[]> paMap) throws Exception {
		// 删除sql
		String sql = "delete from t_clazz where cid = ?";
		return super.executeUpdate(sql, new String[] { "cid" }, paMap);
	}
	
	

	/**
	 * 添加
	 * 
	 * @param paMap
	 * @return
	 * @throws Exception
	 */
	public int add(Map<String, String[]> paMap) throws Exception {
		String sql = "insert into t_clazz (cname, cteachar, pic)values (?,?,?)";
		return super.executeUpdate(sql, new String[] { "cname", "cteachar", "pic"}, paMap);
	}
}

用户dao方法 userdao

package com.crud.dao;


import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import com.crud.entity.Clazz;
import com.crud.util.BaseDao;
import com.crud.util.JsonBaseDao;
import com.crud.util.JsonUtils;
import com.crud.util.PageBean;
import com.crud.util.StringUtils;

/**
 * 普通数据
 * @author Administrator
 *
 */
public class dao extends JsonBaseDao {
	/**
	 *查询
	 * @param paMap
	 * @param pageBean
	 * @return
	 * @throws Exception
	 */
	public List<Map<String, Object>> query(Map<String, String[]> paMap, PageBean pageBean) throws Exception {
		String sql = "select * from t_clazz where true ";
		String cname = JsonUtils.getParamVal(paMap, "cname");
		// 是否带名称查询
		if (StringUtils.isNotBlank(cname)) {
			sql = sql + " and cname  like '%" + cname + "%'";
		}
		String cid = JsonUtils.getParamVal(paMap, "cid");
		// 带id查询
		if (StringUtils.isNotBlank(cid)) {
			sql = sql + " and cid  = " + cid ;
		}
		
		return super.executeQuery(sql, pageBean);
	}
	
	
	
	
	/**
	 *修改
	 * 
	 * @param paMap
	 * @return
	 * @throws Exception
	 */
	public int eidt(Map<String, String[]> paMap) throws Exception {
		String sql = "update t_clazz set cname = ?, cteachar = ?, pic = ? where cid = ?";
		return super.executeUpdate(sql, new String[] {"cname", "cteachar", "pic", "cid"}, paMap);
	}

	
	
	/**
	 *删除
	 * @param paMap
	 * @return
	 * @throws Exception
	 */
	public int remove(Map<String, String[]> paMap) throws Exception {
		// 删除sql
		String sql = "delete from t_clazz where cid = ?";
		return super.executeUpdate(sql, new String[] { "cid" }, paMap);
	}
	
	

	/**
	 * 添加
	 * 
	 * @param paMap
	 * @return
	 * @throws Exception
	 */
	public int add(Map<String, String[]> paMap) throws Exception {
		String sql = "insert into t_clazz (cname, cteachar, pic)values (?,?,?)";
		return super.executeUpdate(sql, new String[] { "cname", "cteachar", "pic"}, paMap);
	}
}

角色dao方法partdao

package com.crud.dao;

import java.util.List;
import java.util.Map;

import com.crud.util.JsonBaseDao;
import com.crud.util.JsonUtils;
import com.crud.util.PageBean;
import com.crud.util.StringUtils;



/**
 * 角色
 * 
 * @author 201900514
 *
 */
public class PartDao extends JsonBaseDao {

	/**
	 * 添加
	 * 
	 * @param paramMap
	 * @return
	 * @throws Exception
	 */
	public int add(Map<String, String[]> paramMap) throws Exception {
		String sql = "insert into part(part_name,description, statu) values (?, ?, 1)";
		return super.executeUpdate(sql, new String[] { "part_name", "description" }, paramMap);
	}

	/**
	 * 移除
	 * 
	 * @param paramMap
	 * @return
	 * @throws Exception
	 */
	public int remove(Map<String, String[]> paramMap) throws Exception {
		//移除用户角色的中间表
		super.executeUpdate("delete from user_and_part where part_id =" + JsonUtils.getParamVal(paramMap, "part_id"));
		//移除角色菜单的中间表
		super.executeUpdate(
				"delete from part_and_permission where part_id = " + JsonUtils.getParamVal(paramMap, "part_id"));
		return super.executeUpdate("delete from part where part_id = ?", new String[] { "part_id" }, paramMap);
	}

	/**
	 * 修改
	 * 
	 * @param paramMap
	 * @return
	 * @throws Exception
	 */
	public int eidt(Map<String, String[]> paramMap) throws Exception {
		String sql = "update part set part_name = ?, description = ? where part_id = ?";
		return super.executeUpdate(sql, new String[] { "part_name", "description", "part_id" }, paramMap);
	}

	/**
	 * 修改状态
	 * 
	 * @param paramMap
	 * @return
	 * @throws Exception
	 */
	public int eidtStatu(Map<String, String[]> paramMap) throws Exception {
		String sql = "update part set statu = ? where part_id = ?";
		return super.executeUpdate(sql, new String[] { "statu", "part_id" }, paramMap);
	}

	/**
	 * 角色名是否存在
	 * 
	 * @return
	 */
	public boolean isName(Map<String, String[]> paramMap) throws Exception {
		List<Map<String, Object>> list = null;
		if(StringUtils.isNotBlank(JsonUtils.getParamVal(paramMap, "part_id"))) {
			String sql = "select part_id from part where part_id != ? and part_name = ?";
			 list = super.executeQuery(sql, new String[] { "part_id", "part_name" }, paramMap, null);		
		}else {
			String sql = "select part_id from part where part_name = ?";
			 list = super.executeQuery(sql, new String[] {"part_name" }, paramMap, null);		
		}	
		return list != null && list.size() > 0;
	}

	/**
	 * 查询
	 * 
	 * @param paramMap
	 * @param pageBean
	 * @return
	 * @throws Exception
	 */
	public List<Map<String, Object>> query(Map<String, String[]> paramMap, PageBean pageBean) throws Exception {
		String sql = "select part_id, part_name, description, statu  from part where true ";
		//模糊查
		String part_name = JsonUtils.getParamVal(paramMap, "part_name");
		if (StringUtils.isNotBlank(part_name)) {
			sql += " and part_name like '%" + part_name + "%' ";
		}
		// ID查
		String part_id = JsonUtils.getParamVal(paramMap, "part_id");
		if (StringUtils.isNotBlank(part_id)) {
			sql += " and user_id = " + part_id;
		}
		return super.executeQuery(sql, pageBean);
	}
	
	
	/**
	 *获取角色下拉 只有可用的返回
	 * @return
	 * @throws Exception
	 */
	public List<Map<String, Object>> select() throws Exception {
		String sql = "select part_id, part_name  from part where statu = 1";
		return super.executeQuery(sql, null);
	}
	

}

菜单dao方法 permissiondao

package com.crud.dao;

import java.util.List;
import java.util.Map;

import com.crud.util.JsonBaseDao;
import com.crud.util.JsonUtils;
import com.crud.util.PageBean;
import com.crud.util.StringUtils;



/**
 * 角色
 * 
 * @author 20190313
 *
 */
public class PartDao extends JsonBaseDao {

	/**
	 * 添加
	 * 
	 * @param paramMap
	 * @return
	 * @throws Exception
	 */
	public int add(Map<String, String[]> paramMap) throws Exception {
		String sql = "insert into part(part_name,description, statu) values (?, ?, 1)";
		return super.executeUpdate(sql, new String[] { "part_name", "description" }, paramMap);
	}

	/**
	 * 移除
	 * 
	 * @param paramMap
	 * @return
	 * @throws Exception
	 */
	public int remove(Map<String, String[]> paramMap) throws Exception {
		//移除用户角色的中间表
		super.executeUpdate("delete from user_and_part where part_id =" + JsonUtils.getParamVal(paramMap, "part_id"));
		//移除角色菜单的中间表
		super.executeUpdate(
				"delete from part_and_permission where part_id = " + JsonUtils.getParamVal(paramMap, "part_id"));
		return super.executeUpdate("delete from part where part_id = ?", new String[] { "part_id" }, paramMap);
	}

	/**
	 * 修改
	 * 
	 * @param paramMap
	 * @return
	 * @throws Exception
	 */
	public int eidt(Map<String, String[]> paramMap) throws Exception {
		String sql = "update part set part_name = ?, description = ? where part_id = ?";
		return super.executeUpdate(sql, new String[] { "part_name", "description", "part_id" }, paramMap);
	}

	/**
	 * 修改状态
	 * 
	 * @param paramMap
	 * @return
	 * @throws Exception
	 */
	public int eidtStatu(Map<String, String[]> paramMap) throws Exception {
		String sql = "update part set statu = ? where part_id = ?";
		return super.executeUpdate(sql, new String[] { "statu", "part_id" }, paramMap);
	}

	/**
	 * 角色名是否存在
	 * 
	 * @return
	 */
	public boolean isName(Map<String, String[]> paramMap) throws Exception {
		List<Map<String, Object>> list = null;
		if(StringUtils.isNotBlank(JsonUtils.getParamVal(paramMap, "part_id"))) {
			String sql = "select part_id from part where part_id != ? and part_name = ?";
			 list = super.executeQuery(sql, new String[] { "part_id", "part_name" }, paramMap, null);		
		}else {
			String sql = "select part_id from part where part_name = ?";
			 list = super.executeQuery(sql, new String[] {"part_name" }, paramMap, null);		
		}	
		return list != null && list.size() > 0;
	}

	/**
	 * 查询
	 * 
	 * @param paramMap
	 * @param pageBean
	 * @return
	 * @throws Exception
	 */
	public List<Map<String, Object>> query(Map<String, String[]> paramMap, PageBean pageBean) throws Exception {
		String sql = "select part_id, part_name, description, statu  from part where true ";
		//模糊查
		String part_name = JsonUtils.getParamVal(paramMap, "part_name");
		if (StringUtils.isNotBlank(part_name)) {
			sql += " and part_name like '%" + part_name + "%' ";
		}
		// ID查
		String part_id = JsonUtils.getParamVal(paramMap, "part_id");
		if (StringUtils.isNotBlank(part_id)) {
			sql += " and user_id = " + part_id;
		}
		return super.executeQuery(sql, pageBean);
	}
	
	
	/**
	 *获取角色下拉 只有可用的返回
	 * @return
	 * @throws Exception
	 */
	public List<Map<String, Object>> select() throws Exception {
		String sql = "select part_id, part_name  from part where statu = 1";
		return super.executeQuery(sql, null);
	}
	

}

util

这是util包里的类
在这里插入图片描述
basetdao

package com.crud.util;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

/**
 * 閫氱敤鐨勬煡璇㈡柟娉� 23绉嶈璁℃ā寮忎箣绛栫暐妯″紡 浣滅敤锛氬湪鏂规硶鎴栫被涓凡缁忓畬鎴愪簡瀵瑰簲鐨勫姛鑳斤紝鐒跺悗鍦ㄨ皟鐢ㄦ柟鍘绘牴鎹嚜宸辩殑闇�姹傚幓澶勭悊缁撴灉銆� 浣垮緱浠g爜鏇村姞鐏垫椿銆�
 * 
 * @author Administrator
 *
 * @param <T>
 */
public class BaseDao<T> {
	// $.ajax
	protected interface Callback<T> {
		public List<T> foreach(ResultSet rs) throws SQLException, InstantiationException, IllegalAccessException;
	}

	public List<T> executeQuery(String sql, PageBean pageBean, Callback<T> callback)
			throws SQLException, InstantiationException, IllegalAccessException {
		if (pageBean != null && pageBean.isPagination()) {
			Connection con = DBAccess.getConnection();
			String countSql = getCountSql(sql);
			PreparedStatement countPst = con.prepareStatement(countSql);
			ResultSet countRs = countPst.executeQuery();
			if (countRs.next()) {
				pageBean.setTotal(countRs.getObject(1).toString());
			}
			DBAccess.close(null, countPst, countRs);

			String pageSql = getPageSql(sql, pageBean);
			PreparedStatement pagePst = con.prepareStatement(pageSql);
			ResultSet pageRs = pagePst.executeQuery();
			try {
				return callback.foreach(pageRs);
			} finally {
				DBAccess.close(con);
			}
		} else {
			Connection con = DBAccess.getConnection();
			PreparedStatement pst = con.prepareStatement(sql);
			ResultSet rs = pst.executeQuery();
			try {
				return callback.foreach(rs);
			} finally {
				DBAccess.close(con);
			}
		}

	}
	
	

	/**
	 * 鍙敤浣跨敤鏁扮粍杩涜璧嬪��
	 * @param sql
	 * @param pageBean
	 * @param callback
	 * @return
	 * @throws SQLException
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 */
	public List<T> executeQueryToarray(String sql,String[] attrs, Map<String, String[]> paMap, PageBean pageBean, Callback<T> callback)
			throws SQLException, InstantiationException, IllegalAccessException {
		if (pageBean != null && pageBean.isPagination()) {
			Connection con = DBAccess.getConnection();
			String countSql = getCountSql(sql);
			PreparedStatement countPst = con.prepareStatement(countSql);
			
			for (int i = 0; i < attrs.length; i++) {
				countPst.setObject(i + 1, JsonUtils.getParamVal(paMap, attrs[i]));
			}
			
			ResultSet countRs = countPst.executeQuery();
			if (countRs.next()) {
				pageBean.setTotal(countRs.getObject(1).toString());
			}
			DBAccess.close(null, countPst, countRs);
			
			String pageSql = getPageSql(sql, pageBean);
			PreparedStatement pagePst = con.prepareStatement(pageSql);
	
			for (int i = 0; i < attrs.length; i++) {
				pagePst.setObject(i + 1, JsonUtils.getParamVal(paMap, attrs[i]));
			}
			
			ResultSet pageRs = pagePst.executeQuery();
			
			try {
				return callback.foreach(pageRs);
			} finally {
				DBAccess.close(con);
			}
		} else {
			Connection con = DBAccess.getConnection();
			PreparedStatement pst = con.prepareStatement(sql);
			for (int i = 0; i < attrs.length; i++) {
				pst.setObject(i + 1, JsonUtils.getParamVal(paMap, attrs[i]));
			}
			ResultSet rs = pst.executeQuery();
			try {
				return callback.foreach(rs);
			} finally {
				DBAccess.close(con);
			}
		}

	}


	/**
	 * 灏嗗師鐢熸�佺殑sql璇彞杞崲鎴愭煡瀵瑰簲鐨勫綋椤佃褰曟暟sql璇彞
	 * 
	 * @param sql
	 * @param pageBean
	 * @return
	 */
	private String getPageSql(String sql, PageBean pageBean) {
		return sql + " limit " + pageBean.getStartIndex() + "," + pageBean.getRows();
	}

	/**
	 * 灏嗗師鐢熸�佺殑sql璇彞杞崲鎴愭煡鎬昏褰曡緭鐨剆ql璇彞
	 * 
	 * @param sql
	 * @return
	 */
	private String getCountSql(String sql) {
		return "select count(1) from (" + sql + " ) t";
	}
}

jsonbasedao

package com.cpc.util;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class JsonBaseDao extends BaseDao<Map<String, Object>> {
	public List<Map<String, Object>> executeQuery(String sql, PageBean pageBean)
			throws SQLException, InstantiationException, IllegalAccessException {
		return super.executeQuery(sql, pageBean, new Callback<Map<String, Object>>() {
			@Override
			public List<Map<String, Object>> foreach(ResultSet rs)
					throws SQLException, InstantiationException, IllegalAccessException {
				/*
				 * 1銆佸垱寤轰竴涓疄浣撶被鐨勫疄渚� 2銆佺粰鍒涘缓鐨勫疄渚嬪睘鎬ц祴鍊� 3銆佸皢娣诲姞瀹岀被瀹圭殑瀹炰綋绫绘坊鍔犲埌list闆嗗悎涓�
				 */
				// list.add(new Book(rs.getInt("bid"), rs.getString("bname"),
				// rs.getFloat("price")));
				List<Map<String, Object>> list = new ArrayList<>();
				// 鑾峰彇婧愭暟鎹�
				ResultSetMetaData md = rs.getMetaData();
				int count = md.getColumnCount();
				Map<String, Object> map = null;
				while (rs.next()) {
					map = new HashMap<>();
					for (int i = 1; i <= count; i++) {
						map.put(md.getColumnName(i), rs.getObject(i));
					}
					list.add(map);
				}
				return list;
			}
		});
	}

	public List<Map<String, Object>> executeQuery(String sql, String[] attrs, Map<String, String[]> paMap,
			PageBean pageBean) throws Exception {
		return super.executeQueryToarray(sql, attrs, paMap, pageBean, new Callback<Map<String, Object>>() {
			@Override
			public List<Map<String, Object>> foreach(ResultSet rs)
					throws SQLException, InstantiationException, IllegalAccessException {
				/*
				 * 1銆佸垱寤轰竴涓疄浣撶被鐨勫疄渚� 2銆佺粰鍒涘缓鐨勫疄渚嬪睘鎬ц祴鍊� 3銆佸皢娣诲姞瀹岀被瀹圭殑瀹炰綋绫绘坊鍔犲埌list闆嗗悎涓�
				 */
				// list.add(new Book(rs.getInt("bid"), rs.getString("bname"),
				// rs.getFloat("price")));
				List<Map<String, Object>> list = new ArrayList<>();
				// 鑾峰彇婧愭暟鎹�
				ResultSetMetaData md = rs.getMetaData();
				int count = md.getColumnCount();
				Map<String, Object> map = null;
				while (rs.next()) {
					map = new HashMap<>();
					for (int i = 1; i <= count; i++) {
						map.put(md.getColumnName(i), rs.getObject(i));
					}
					list.add(map);
				}
				return list;
			}
		});
	}
	
	/**
	 * 根据sql语句查询,查出第一位
	 * 数据库中只返回一位
	 * @param sql
	 * @return
	 * @throws Exception
	 */
	public Object executeByObject(String sql) throws Exception {
		Connection con = null;
		PreparedStatement pst = null;
		ResultSet rs = null;
		Object o = 0;
		try {
			con = DBAccess.getConnection();
			pst = con.prepareStatement(sql);
			rs = pst.executeQuery();
		
			if(rs.next()) {
				o = rs.getObject(1);
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		} finally {
			DBAccess.close(con, pst, rs);
		}
		return o;
	}
	
	
	/**
	 * 根据sql语句查询,查第一位(只返回一条),并且返回类型是Integer的
	 * @param sql
	 * @return
	 * @throws Exception
	 */
	public Integer executeByInteger(String sql) throws Exception {
		return  Integer.parseInt(executeByObject(sql).toString());
	}
	
	
	
	
	
	/**
	 * 根据sql语句查询,查出Set<Integer>
	 * 注意:第一位必须是int类型(数据库中)
	 * @param sql
	 * @return
	 * @throws Exception
	 */
	public Set<Integer> executeByIntegers(String sql) throws Exception {
		Connection con = null;
		PreparedStatement pst = null;
		ResultSet rs = null;
		Set<Integer> set = new HashSet<Integer>();
	
		try {
			con = DBAccess.getConnection();
			pst = con.prepareStatement(sql);
			rs = pst.executeQuery();
		
			while(rs.next()) {
				set.add(rs.getInt(1));
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		} finally {
			DBAccess.close(con, pst, rs);
		}
		return set;
	}
	

	/**
	 * 
	 * @param sql
	 * @param attrs
	 *            map涓殑key
	 * @param paMap
	 *            jsp鍚戝悗鍙颁紶閫掔殑鍙傛暟闆嗗悎
	 * @return
	 * @throws SQLException
	 * @throws NoSuchFieldException
	 * @throws SecurityException
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 */
	public int executeUpdate(String sql, String[] attrs, Map<String, String[]> paramMap) throws SQLException,
			NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
		Connection con = null;
		PreparedStatement pst = null;
		int n = 0;
		try {
			con = DBAccess.getConnection();
			pst = con.prepareStatement(sql);
			for (int i = 0; i < attrs.length; i++) {
				pst.setObject(i + 1, JsonUtils.getParamVal(paramMap, attrs[i]));
			}
			n = pst.executeUpdate();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		} finally {
			DBAccess.close(con, pst, null);

		}
		return n;
	}

	/**
	 * 閫氱敤澧炲垹鏀�
	 * 
	 * @param sql
	 * @return
	 * @throws Exception
	 */
	public int executeUpdate(String sql){
		Connection con = null;
		PreparedStatement pst = null;
		int n = 0;
		try {
			con = DBAccess.getConnection();
			pst = con.prepareStatement(sql);
			n = pst.executeUpdate();
		} catch (Exception e) {
			// TODO: handle exception
		} finally {
			DBAccess.close(con, pst, null);

		}
		return n;
	}

}

responseutil

package com.crud.util;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;

import com.alibaba.fastjson.JSON;

import cn.hutool.json.JSONUtil;

public class ResponseUtil {

	/**
	 * 閫氱敤鐨勫疄鐜�
	 * 
	 * @param response
	 * @param o
	 * @throws Exception
	 */
	public static void write(HttpServletResponse response, Object o) throws Exception {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		out.println(o.toString());
		out.flush();
		out.close();
	}
	
	/**
	 * 转json格式输出到页面
	 * @param response
	 * @param o
	 * @throws Exception
	 */
	public static void writeJSON(HttpServletResponse response, Object o) throws Exception {
		write(response, JSON.toJSONString(o));
	}
	
}

web

useraction

package com.crud.web;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.crud.dao.UserDao;
import com.crud.entity.User;
import com.crud.util.PageBean;
import com.crud.util.ResponseUtil;



/**
 * 用户请求啊action
 * 
 * @author 20190313
 *
 */
public class UserAction extends BaseAction {

	private UserDao userDao = new UserDao();

	/**
	 * 查询
	 * 
	 * @return
	 * @throws SQLException
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws IllegalArgumentException
	 */
	public String query() throws Exception {
		PageBean pageBean = new PageBean();
		pageBean.setPageBean(request);
		List<Map<String, Object>> list = userDao.query(request.getParameterMap(), pageBean);
		Map<String, Object> map = new HashMap<>();
		map.put("code", 0);
		map.put("count", pageBean.getTotal());
		map.put("data", list);
		// 以json格式返回
		ResponseUtil.writeJSON(response, map);
		return null;
	}

	/**
	 * 删除
	 * 
	 * @return
	 * @throws SQLException
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws IllegalArgumentException
	 */
	public String remove() throws Exception {
		// 以json格式输出
		ResponseUtil.writeJSON(response, userDao.remove(request.getParameterMap()));
		return null;
	}

	/**
	 * 登录 1登录成功,-1登录失败
	 * 
	 * @return
	 * @throws SQLException
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws IllegalArgumentException
	 */
	public String login() throws Exception {
		User user = userDao.login(request.getParameterMap());
		// 判断
		if (user != null) {
			//将user对象放入sesion中
			request.getSession().setAttribute("user", user);
			ResponseUtil.writeJSON(response, 1);
			return null;
		}
		ResponseUtil.writeJSON(response, -1);
		return null;
	}

	/**
	 * 增加
	 * 
	 * @return
	 * @throws SQLException
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws IllegalArgumentException
	 */
	public String add() throws Exception {
		// 判断用户名是重复
		if (userDao.isName(request.getParameterMap())) {
			// 用户名重复返回-2
			ResponseUtil.writeJSON(response, -2);
			return null;
		}
		// 以json格式返回
		ResponseUtil.writeJSON(response, userDao.add(request.getParameterMap()));
		return null;
	}

	/**
	 * 修改
	 * 
	 * @return
	 * @throws SQLException
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws IllegalArgumentException
	 */
	public String edit() throws Exception {
		// 判断用户名是重复
		if (userDao.isName(request.getParameterMap())) {
			// 用户名重复返回-2
			ResponseUtil.writeJSON(response, -2);
			return null;
		}
		
		ResponseUtil.writeJSON(response, userDao.edit(request.getParameterMap()));
		return null;
	}

	/**
	 * ̬修改用户状态
	 * 
	 * @return
	 * @throws SQLException
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws IllegalArgumentException
	 */
	public String eidtStatu() throws Exception {
		ResponseUtil.writeJSON(response, userDao.eidtStatu(request.getParameterMap()));
		return null;
	}
	
	/**
	 *用户退出登录
	 * @return
	 * @throws Exception
	 */
	public String exit() throws Exception {
		//退出登录
		request.getSession().removeAttribute("user");
		ResponseUtil.writeJSON(response, 1);
		return null;
	}

	
	
	
}

Clazzaction

package com.crud.web;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.crud.dao.dao;
import com.crud.util.BaseAction;
import com.crud.util.PageBean;
import com.crud.util.ResponseUtil;

public class ClazzAction extends BaseAction{
	private dao clzDao = new dao();
	/**
	 * 添加
	 * @return
	 * @throws Exception 
	 */
	public  String add() throws Exception {
		int n = clzDao.add(request.getParameterMap());
		ResponseUtil.writeJSON(response, n);
		return null;
	}
	
	/**
	 * 查询
	 * @return
	 * @throws Exception 
	 */
	public  String query() throws Exception {
		PageBean pageBean = new PageBean();
		
		List<Map<String, Object>> list  = clzDao.query(request.getParameterMap(), pageBean);
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("code", 0);
		map.put("count", pageBean.getTotal());
		map.put("data", list);
		
		//以JSON格式返回
		ResponseUtil.writeJSON(response, map);
		return null;
	}
	
	
	
	/**
	 *修改
	 * @return
	 * @throws Exception 
	 */
	public  String eidt() throws Exception {
		int n = clzDao.eidt(request.getParameterMap());
		ResponseUtil.writeJSON(response, n);
		return null;
	}
	
	
	
	/**
	 * 删除
	 * @return
	 * @throws Exception 
	 */
	public  String remove() throws Exception {
		int n = clzDao.remove(request.getParameterMap());
		ResponseUtil.write(response, n);
		return null;
	}

	

}

partaction

package com.crud.web;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.crud.dao.PartDao;
import com.crud.util.PageBean;
import com.crud.util.ResponseUtil;



public class PartAction extends BaseAction {

	private PartDao partDao = new PartDao();

	/**
	 * 查询
	 * 
	 * @return
	 * @throws SQLException
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws IllegalArgumentException
	 */
	public String query() throws Exception {
		PageBean pageBean = new PageBean();
		pageBean.setPageBean(request);
		List<Map<String, Object>> list = partDao.query(request.getParameterMap(), pageBean);
		Map<String, Object> map = new HashMap<>();
		//要与layui的格式保持一致
		map.put("code", 0);
		map.put("count", pageBean.getTotal());
		map.put("data", list);
		// json
		ResponseUtil.writeJSON(response, map);
		return null;
	}
	
	/**
	 * 获取角色下拉  只有可用的返回
	 * 
	 * @return
	 * @throws SQLException
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws IllegalArgumentException
	 */
	public String select() throws Exception {
		// json
		ResponseUtil.writeJSON(response, partDao.select());
		return null;
	}
	

	/**
	 * 删除
	 * 
	 * @return
	 * @throws SQLException
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws IllegalArgumentException
	 */
	public String remove() throws Exception {
		// json
		ResponseUtil.writeJSON(response, partDao.remove(request.getParameterMap()));
		return null;
	}

	/**
	 * 添加
	 * 
	 * @return
	 * @throws SQLException
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws IllegalArgumentException
	 */
	public String add() throws Exception {
		// 判断角色名是重复
		if (partDao.isName(request.getParameterMap())) {
			// 返回-1
			ResponseUtil.writeJSON(response, -1);
			return null;
		}

		//json
		ResponseUtil.writeJSON(response, partDao.add(request.getParameterMap()));
		return null;
	}

	/**
	 *修改
	 * 
	 * @return
	 * @throws SQLException
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws IllegalArgumentException
	 */
	public String eidt() throws Exception {
		// 判断角色名是重复
		if (partDao.isName(request.getParameterMap())) {
			// 返回-2
			ResponseUtil.writeJSON(response, -2);
			return null;
		}

		// json
		ResponseUtil.writeJSON(response, partDao.eidt(request.getParameterMap()));
		return null;
	}

	/**
	 * 修改角色状态״̬
	 * 
	 * @return
	 * @throws SQLException
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws IllegalArgumentException
	 */
	public String eidtStatu() throws Exception {
		// json
		ResponseUtil.writeJSON(response, partDao.eidtStatu(request.getParameterMap()));
		return null;
	}

}

permissionaction

package com.crud.web;

import java.sql.SQLException;

import com.crud.dao.PermissionDao;
import com.crud.util.ResponseUtil;

/**
 * 权限请求Action
 * @author 20190313
 *
 */
public class PermissionAction extends BaseAction{
	PermissionDao permissionDao = new PermissionDao();
	

	
	
	/**
	 * 获取角色权限赋值tree
	 * 
	 * @return
	 * @throws SQLException
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws IllegalArgumentException
	 */
	public String getPartTree() throws Exception {
		// 以json格式返回
		ResponseUtil.writeJSON(response, permissionDao.getPartTree(request.getParameterMap()));
		return null;
	}
	
	
	
	/**
	 *角色授权
	 * 
	 * @return
	 * @throws SQLException
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws IllegalArgumentException
	 */
	public String partPermissionBinding() throws Exception {
		permissionDao.partPermissionBinding(request.getParameterMap());
		ResponseUtil.writeJSON(response, 1);
		return null;
	}
	
	
	
	
	/**
	 *获取用户权限菜单,根据用户ID
	 * 
	 * @return
	 * @throws SQLException
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws IllegalArgumentException
	 */
	public String getUserTree() throws Exception {
		ResponseUtil.writeJSON(response, permissionDao.getUserTree(request.getParameterMap()));
		return null;
	}
	
	
}

效果展示

登录界面
在这里插入图片描述
主界面
在这里插入图片描述
角色管理
在这里插入图片描述
用户管理
在这里插入图片描述
普通数据管理(测试用)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值