由于本人在学习期间做登录注册的时候,需要给注册添加验证,研究很长时间也没想到什么方便快捷的方法
下面就是我自己看一些文档整理的思路,如有bug,欢迎指点!!!
首先: 下载连个验证依赖
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api 这个可以不下载 因为hibernate-validator里有这个功能-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.0.Final</version>
</dependency>
然后:在你的bean上写验证规则
userBean:
public class User {
private Integer id;
@NotBlank(message = "用户名不能为空")
@Length(max = 6, min = 3, message = "长度在3-6之间")
private String name;//用户名
@NotBlank(message="{密码不能为空}")
// @Pattern(regexp="/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,10}$/", message="密码必须是6~10位数字和字母的组合")
private String password; //密码
private Integer level; //等级
private String des; //简介
@Pattern(regexp="^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$", message="请输入正确的号码格式")
private String tel; //电话
private String address; //地址
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
", level=" + level +
", des='" + des + '\'' +
", tel='" + tel + '\'' +
", address='" + address + '\'' +
'}';
}
其次:在你的controller上写注册信息
UserController:
在controller这个类里面的注册方法的bean上要注明valid 证明这个bean是需要被验证的,然后后面再接个ModelAttribute确定真正验证的bean的属性名,一般后面还要再接一个BindingResult,它会将错误信息赋值并且显示在jsp页面
这里的jsp页面省略
@Controller
public class UserController {
@Resource
private UserService userService;
@RequestMapping(value = "/")
public String loginPage() {
return "user/login";
}
@RequestMapping(value = "/registpage")
public String registpage() {
return "user/regist";
}
@RequestMapping(value = "/regist", method = RequestMethod.POST)
public String regist(@Valid @ModelAttribute("user") User user, BindingResult result, ModelMap model, HttpServletRequest request) throws IOException {
System.out.println(user);
if (result.hasErrors()) {
return "user/regist";
} else {
model.addAttribute("username", user.getName());
if (user.getPassword().equals(request.getParameter("repassword"))) {
userService.regist(user);
System.out.println("用户注册: " + user.getName() + user.getPassword());
}
return "user/login";
}
}
@ModelAttribute("user")
public User getUser() {
User user = new User();
return user;
}
@RequestMapping(value = "/login")
// @ResponseBody
public String login(String name, String password, Model model) {
User user = userService.login(name, password);
if (user != null) {
model.addAttribute(user);
model.addAttribute("msg", "登录成功");
return "blog/showBlog";
} else {
return "redirect:registpage";
}
// return user;
}
}
最后:在你的regist.jsp上写信息的响应
regist.jsp:
这个是局部显示错误信息
<input type="text" name="name" class="form-control" id="name" placeholder="请输入用户名">
<form:errors path="name" cssStyle="color: red"></form:errors>
这个是我自己的页面的显示错误信息
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>注册页面</title>
<%--<link href="css/bootstrap.min.css" rel="stylesheet">--%>
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<script src="js/jquery-3.2.1.js" type="text/javascript"></script>
</head>
<body>
<form:form action="regist" method="post" modelAttribute="user">
<div class="container">
<div class="col-md-4">
<div class="form-group">
<label for="name">用户名</label>
<input type="text" name="name" class="form-control" id="name" placeholder="请输入用户名">
<form:errors path="name" cssStyle="color: red"></form:errors>
</div>
<div class="form-group">
<label for="password">密码</label>
<input type="password" class="form-control" id="password" name="password" placeholder="请输入密码">
<form:errors path="password" cssStyle="color: red"></form:errors>
</div>
<div class="form-group">
<label for="repassword">重置密码</label>
<input type="password" class="form-control" id="repassword" name="repassword" placeholder="请再次输入密码">
<%--<form:errors path="password" cssStyle="color: red">两次密码不一致</form:errors>--%>
</div>
<div class="form-group">
<label for="tel">电话</label>
<input type="text" class="form-control" id="tel" name="tel" placeholder="请输入常用电话">
<form:errors path="tel" cssStyle="color: red"></form:errors>
</div>
<div class="form-group">
<label for="address">地址</label>
<input type="text" class="form-control" id="address" name="address" placeholder="请输入常用地址">
</div>
<button id="btn" type="submit" class="btn btn-default">提交注册</button>
</div>
</div>
</form:form>
</body>