SSM权限管理系统+权限认证 第二章 页面搭建和分页加载所有User
SSM权限管理系统+权限认证 第三章
小目录
- 修改userList.html中按钮文字和按钮路径
- 在spring-mvc中配置路径映射
- 在application/user下创建addUser.html
- 在bean中定义返回数据的实体类ResultEntity
- controller写addUser方法
1. 完成添加用户
-
修改userList.html中按钮文字
-
修改userList.html中按钮路径
-
在spring-mvc中配置路径映射,防止因当前路径导致css,js路径错误。其实就是在controller写一个方法返回页面一样。
<!-- 指定跳转的页面的页面 path:请求的地址 view-name:跳转的视图名称 --> <mvc:view-controller path="user/toAddUser" view-name="user/addUser"/>
-
引入自己写的一个提交表单的js,放在js下 form-utils
// 提交表单 function submitForm(url,formId){ // 1.获取表单参数(对象) var param = formToObjct(formId); // 2.发送请求 sendRequest(url,param); } /** * 给服务端发送请求 * @param url */ function sendRequest(url,param){ // 3.异步把对象发送给后台 $.post(url,param,function(data){ responseClient(data); }); } /** * 响应客户 * @param data */ function responseClient(data){ if(data.status == "ok"){ layer.msg(data.msg, { icon: 1, time: 1000 //2秒关闭(如果不配置,默认是3秒) }, function(){ // 提示框关闭后调用 // 关闭对话框 var index = parent.layer.getFrameIndex(window.name); // 获取框的索引 parent.layer.close(index); // 关闭框 }); }else{ layer.msg(data.msg, { icon: 2, time: 1000 //2秒关闭(如果不配置,默认是3秒) }, function(){ // 提示框关闭后调用 // 关闭对话框 // var index = parent.layer.getFrameIndex(window.name); // 获取框的索引 // parent.layer.close(index); // 关闭框 }); } } // 把表单对象中的数据封装到一个对象中 function formToObjct(formId){ // 1.创建一个对象 var param = new Object(); // 2.获取到表单的数组对象 var array = $("#"+formId).serializeArray(); // 3.遍历数组获取对象中的内容 for(var i =0;i<array.length;i++){ var formObj = array[i]; // 把formObj对象中的属性和value赋值param param[formObj.name] = formObj.value; } // 4.返回对象 return param; }
-
在application/user下创建addUser.html,将admin2中admin-add.html内容复制进去
-
引入thymeleaf.org和写<base>
-
写添加用户表单提交的函数
<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head> <base th:href="${#request.getContextPath()+'/'}"> <meta charset="utf-8"> <meta name="renderer" content="webkit|ie-comp|ie-stand"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" /> <meta http-equiv="Cache-Control" content="no-siteapp" /> <!--[if lt IE 9]> <script type="text/javascript" src="lib/html5.js"></script> <script type="text/javascript" src="lib/respond.min.js"></script> <script type="text/javascript" src="lib/PIE_IE678.js"></script> <![endif]--> <link href="css/H-ui.min.css" rel="stylesheet" type="text/css" /> <link href="css/H-ui.admin.css" rel="stylesheet" type="text/css" /> <link href="lib/icheck/icheck.css" rel="stylesheet" type="text/css" /> <link href="lib/Hui-iconfont/1.0.1/iconfont.css" rel="stylesheet" type="text/css" /> <!--[if IE 6]> <script type="text/javascript" src="http://lib.h-ui.net/DD_belatedPNG_0.0.8a-min.js" ></script> <script>DD_belatedPNG.fix('*');</script> <![endif]--> <title>添加管理员</title> </head> <body> <div class="pd-20"> <form action="#" method="post" class="form form-horizontal" id="form-user-add"> <div class="row cl"> <label class="form-label col-3"><span class="c-red">*</span>姓名:</label> <div class="formControls col-5"> <input type="text" class="input-text" value="admin" placeholder="" id="username" name="username" errormsg="用户名只能为2~16位" datatype="*2-16" nullmsg="用户名不能为空"> </div> <div class="col-4"> </div> </div> <div class="row cl"> <label class="form-label col-3"><span class="c-red">*</span>密码:</label> <div class="formControls col-5"> <input type="password" placeholder="密码" name="password" id="password" autocomplete="off" value="123456" class="input-text" datatype="*6-20" nullmsg="密码不能为空"> </div> <div class="col-4"> </div> </div> <div class="row cl"> <label class="form-label col-3"><span class="c-red">*</span>确认密码:</label> <div class="formControls col-5"> <input type="password" placeholder="密码" name="repassword" id="repassword" recheck="password" autocomplete="off" value="123456" class="input-text" datatype="*6-20" nullmsg="密码不能为空"> </div> <div class="col-4"> </div> </div> <div class="row cl"> <label class="form-label col-3"><span class="c-red">*</span>性别:</label> <div class="formControls col-5 skin-minimal"> <div class="radio-box"> <input type="radio" value="1" id="sex-1" checked="checked" name="sex" datatype="*" nullmsg="请选择性别!"> <label for="sex-1">男</label> </div> <div class="radio-box"> <input type="radio" id="sex-2" value="0" name="sex"> <label for="sex-2">女</label> </div> </div> <div class="col-4"> </div> </div> <div class="row cl"> <label class="form-label col-3"><span class="c-red">*</span>年龄:</label> <div class="formControls col-5"> <input type="text" class="input-text" value="18" placeholder="" id="age" name="age" datatype="n1-2" nullmsg="年龄不能为空"> </div> <div class="col-4"> </div> </div> <div class="row cl"> <label class="form-label col-3"><span class="c-red">*</span>邮箱:</label> <div class="formControls col-5"> <input type="text" class="input-text" value="[email protected]" placeholder="@" name="email" id="email" datatype="e" nullmsg="请输入邮箱!"> </div> <div class="col-4"> </div> </div> <div class="row cl"> <label class="form-label col-3"><span class="c-red">*</span>生日:</label> <div class="formControls col-5"> <input type="text" value="2020-01-10" onfocus="WdatePicker({maxDate:'#F{$dp.$D(\'birthday\')||\'%y-%M-%d\'}'})" name="birthday" id="birthday" class="input-text Wdate" style="width:120px;"> </div> <div class="col-4"> </div> </div> <div class="row cl"> <div class="col-9 col-offset-3"> <input class="btn btn-primary radius" type="submit" value=" 提交 "> </div> </div> </form> </div> <script type="text/javascript" src="lib/jquery/1.9.1/jquery.min.js"></script> <script type="text/javascript" src="lib/icheck/jquery.icheck.min.js"></script> <!-- 表单校验--> <script type="text/javascript" src="lib/Validform/5.3.2/Validform.min.js"></script> <!-- 时间插件--> <script type="text/javascript" src="/lib/My97DatePicker/WdatePicker.js"></script> <script type="text/javascript" src="lib/layer/1.9.3/layer.js"></script> <script type="text/javascript" src="js/H-ui.js"></script> <script type="text/javascript" src="js/H-ui.admin.js"></script> <script type="text/javascript" src="js/form_utils.js"></script> <script type="text/javascript" > $(function(){ $('.skin-minimal input').iCheck({ checkboxClass: 'icheckbox-blue', radioClass: 'iradio-blue', increaseArea: '20%' }); $("#form-user-add").Validform({ tiptype:2, callback:function(form){ // 表单校验通过后调用这个函数 // debugger submitForm("user/addUser","form-user-add") // 如果callback里明确return false,则表单不会提交,如果return true或没有return,则会提交表单 return false; } }); }); </script> </body> </html>
-
在bean写一个返回数据的实体类ResultEntity,以后Controller所有的返回信息都可以封装进去
package com.wpj.bean; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class ResultEntity<T> { private static final String STATUS_SUC = "ok"; // 成功; private static final String STATUS_FAIL = "error";// 失败 private static final String NO_MSG = null;// 失败 private static final String SUC_MSG = "操作成功";// 失败 private static final String FIAL_MSG = "操作失败";// 失败 private static final String NO_DATA = null;// 没有数据 private String status; // 返回处理的结果的一个状态 private String msg; // 提示信息 private T data; // 服务端返回客户端的数据 /** * 成功时调用 * @return */ public static ResultEntity success(){ return new ResultEntity(STATUS_SUC,SUC_MSG,NO_DATA); } /** * 失败时调用 */ public static ResultEntity fial(){ return new ResultEntity(STATUS_FAIL,FIAL_MSG,NO_DATA); } }
-
controller写addUser方法
@RequestMapping(value = "/addUser") @ResponseBody public ResultEntity addUser(User user) { System.out.println("user = [" + user + "]"); int add = iUserService.add(user); if (add > 0) { return ResultEntity.success(); } else { return ResultEntity.fial(); } }
-
提交表单
注意:
- 如果直接提交的话会报400请求错误,原因为springmvc默认时间格式为 2020/1/13 记得实体类中Date属性添加 @DateTimeFormat(pattern = “yyyy-MM-dd”)
- 如果在提交就会报 org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type: class com.wpj.bean.ResultEntity,这时候需要在spring-mvc中配一个转换器,在配转换器之前需要导依赖。
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.4</version> </dependency>
<bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean>
-
添加功能完毕。。。
2. 编辑User
-
修改userList.html(去掉停用,修改编辑的title和路径)
<td class="td-manage"> <a title="编辑" href="javascript:;" th:onclick="|admin_edit('用户编辑','user/getUserById/${user.id}','1','800','500')|" class="ml-5" style="text-decoration:none"> <i class="Hui-iconfont"></i> </a> <a title="删除" href="javascript:;" onclick="admin_del(this,'1')" class="ml-5" style="text-decoration:none"> <i class="Hui-iconfont"></i> </a> </td>
-
写controller(用于数据显示在表单中)
@RequestMapping("/getUserById/{id}") public String getUserById(@PathVariable Integer id, ModelMap map) { User user = iUserService.getById(id); map.put("user", user); return "user/updateUser"; }
-
从addUser复制创建一个updateUser,修改一下,将写死的值动态生成
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<base th:href="${#request.getContextPath()+'/'}">
<meta charset="utf-8">
<meta name="renderer" content="webkit|ie-comp|ie-stand">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
<!--[if lt IE 9]>
<script type="text/javascript" src="lib/html5.js"></script>
<script type="text/javascript" src="lib/respond.min.js"></script>
<script type="text/javascript" src="lib/PIE_IE678.js"></script>
<![endif]-->
<link href="css/H-ui.min.css" rel="stylesheet" type="text/css" />
<link href="css/H-ui.admin.css" rel="stylesheet" type="text/css" />
<link href="lib/icheck/icheck.css" rel="stylesheet" type="text/css" />
<link href="lib/Hui-iconfont/1.0.1/iconfont.css" rel="stylesheet" type="text/css" />
<!--[if IE 6]>
<script type="text/javascript" src="http://lib.h-ui.net/DD_belatedPNG_0.0.8a-min.js" ></script>
<script>DD_belatedPNG.fix('*');</script>
<![endif]-->
<title>添加管理员</title>
</head>
<body>
<div class="pd-20">
<form action="abc" method="post" class="form form-horizontal" id="form-user-update">
<div class="row cl">
<label class="form-label col-3"><span class="c-red">*</span>姓名:</label>
<div class="formControls col-5">
<input type="hidden" name="id" th:value="${user.id}">
<input type="text" class="input-text" th:value="${user.username}" placeholder="" id="username" name="username" errormsg="用户名只能为2~16位" datatype="*2-16" nullmsg="用户名不能为空">
</div>
<div class="col-4"> </div>
</div>
<div class="row cl">
<label class="form-label col-3"><span class="c-red">*</span>性别:</label>
<div class="formControls col-5 skin-minimal">
<div class="radio-box">
<input type="radio" value="1" id="sex-1" th:checked="${user.sex == 0?true:false}" name="sex" datatype="*" nullmsg="请选择性别!">
<label for="sex-1">男</label>
</div>
<div class="radio-box">
<input type="radio" id="sex-2" th:checked="${user.sex == 1?true:false}" value="0" name="sex">
<label for="sex-2">女</label>
</div>
</div>
<div class="col-4"> </div>
</div>
<div class="row cl">
<label class="form-label col-3"><span class="c-red">*</span>年龄:</label>
<div class="formControls col-5">
<input type="text" class="input-text" th:value="${user.age}" placeholder="" id="age" name="age" datatype="n1-2" nullmsg="年龄不能为空">
</div>
<div class="col-4"> </div>
</div>
<div class="row cl">
<label class="form-label col-3"><span class="c-red">*</span>邮箱:</label>
<div class="formControls col-5">
<input type="text" class="input-text" th:value="${user.email}" placeholder="@" name="email" id="email" datatype="e" nullmsg="请输入邮箱!">
</div>
<div class="col-4"> </div>
</div>
<div class="row cl">
<label class="form-label col-3"><span class="c-red">*</span>生日:</label>
<div class="formControls col-5">
<input type="text" th:value="${#dates.format(user.birthday,'yyyy-MM-dd')}" onfocus="WdatePicker({maxDate:'#F{$dp.$D(\'birthday\')||\'%y-%M-%d\'}'})" name="birthday" id="birthday" class="input-text Wdate" style="width:120px;">
</div>
<div class="col-4"> </div>
</div>
<div class="row cl">
<div class="col-9 col-offset-3">
<input class="btn btn-primary radius" type="submit" value=" 提交 ">
</div>
</div>
</form>
</div>
<script type="text/javascript" src="lib/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="lib/icheck/jquery.icheck.min.js"></script>
<!-- 表单校验-->
<script type="text/javascript" src="lib/Validform/5.3.2/Validform.min.js"></script>
<!-- 时间插件-->
<script type="text/javascript" src="/lib/My97DatePicker/WdatePicker.js"></script>
<script type="text/javascript" src="lib/layer/1.9.3/layer.js"></script>
<script type="text/javascript" src="js/H-ui.js"></script>
<script type="text/javascript" src="js/H-ui.admin.js"></script>
<script type="text/javascript" src="js/form_utils.js"></script>
<script type="text/javascript">
$(function(){
$('.skin-minimal input').iCheck({
checkboxClass: 'icheckbox-blue',
radioClass: 'iradio-blue',
increaseArea: '20%'
});
$("#form-user-update").Validform({
tiptype:2,
callback:function(form){ // 表单校验通过后调用这个函数
submitForm("user/updateUser","form-user-update")
// debugger
return false;
}
});
});
</script>
</body>
</html>
- 在写controller(用于修改数据)
@RequestMapping("/updateUser")
@ResponseBody
public ResultEntity updateUser(User user){
int update = iUserService.update(user);
if(update > 0){
return ResultEntity.success();
}else{
return ResultEntity.fial();
}
}
- 在H-ui.admin.js中修改layer_show()函数(修改公共资源记得清理缓存)
3. 删除用户
- 修改userList的<a> 标签和下方的js,导form-util.js
<a title="删除" href="javascript:;" th:onclick="|admin_del(${user.id})|" class="ml-5" style="text-decoration:none"> <i class="Hui-iconfont"></i> </a>
//管理员-删除 function admin_del(id){ layer.confirm('确认要删除吗?',function(index){ submitForm("user/deleteUserById/"+id, null); }); }
- 写controller
@RequestMapping("/deleteUserById/{id}") @ResponseBody public ResultEntity deleteUserById(@PathVariable Integer id){ System.out.println(id); int delete = iUserService.delete(id); if(delete > 0){ return ResultEntity.success(); }else{ return ResultEntity.fial(); } }
- 删除功能完成。