Spring 注册用户(使用Spring Validator 验证输入)
2016-07-28 10:44
435 查看
使用Spring MVC实现简单的用户注册,用户注册输入使用Spring Validator方式进行验证。
A、实现注册界面registration.jsp:
使用Spring jsp标签库:
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
B、实现Spring Validator接口:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
import com.users.dao.UserDaoImpl;
import com.users.model.User;
@Component
public class UserValidator implements Validator {
private UserDaoImpl userDaoImpl;
@Autowired
public UserValidator(UserDaoImpl userDaoImpl){
this.userDaoImpl=userDaoImpl;
}
public boolean <span style="color:#FF0000;">supports</span>(Class<?> aClass){
return User.class.equals(aClass);
}
public void <span style="color:#FF0000;">validate</span>(Object userObject, Errors errors) {
User user=(User)userObject;
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "username", "NotEmpty");
if(user.getUsername().length()<6||user.getUsername().length()>32){
errors.rejectValue("username", "Size.userForm.username");
}
if(userDaoImpl.findByUserName(user.getUsername())!=null){
errors.rejectValue("username", "Duplicate.userForm.username");
}
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "NotEmpty");
if (user.getPassword().length() < 8 || user.getPassword().length() > 32) {
errors.rejectValue("password", "Size.userForm.password");
}
}
}
其中用到了消息的本地化,修改AppConfig文件:
添加validation消息列表:
@Bean
public ResourceBundleMessageSource messageSource(){
ResourceBundleMessageSource source=new ResourceBundleMessageSource();
source.setBasenames("localization/messages");
<span style="color:#FF0000;">source.setBasenames("localization/validation");</span>
source.setUseCodeAsDefaultMessage(true);
return source;
}
C、注册数据发送至后台时进行验证:
validator 调用validate方法,验证结果存入BindingResult中:
@RequestMapping(value="/registration",method=RequestMethod.POST)
public String registration(@ModelAttribute("userForm") User userForm,BindingResult bindingResult,Model model){
userValidator.<span style="color:#FF0000;">validate</span>(userForm,<span style="color:#FF0000;">bindingResult</span>);
if(bindingResult.hasErrors()){
return "registration";
}
System.out.println(userForm.getUsername());
userDaoImpl.save(userForm);
return "redirect:/secure/";
}
代码:https://github.com/angleBeibei/SpringSecurity
A、实现注册界面registration.jsp:
使用Spring jsp标签库:
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page session="true" %> <%@ page isELIgnored="false" %> <!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=ISO-8859-1"> <title>registration</title> </head> <body> <form:form method="POST" modelAttribute="userForm" enctype="utf8"> <table> <tr> <td>username:</td> <td> <spring:bind path="username"> <form:input path="username"></form:input> <form:errors path="username"></form:errors> </spring:bind> </td> </tr> <tr> <td>password:</td> <td> <spring:bind path="password"> <form:input path="password"></form:input> <form:errors path="password"></form:errors> </spring:bind> </td> </tr> <tr> <td> <input type="submit" value="registe"/> </td> </tr> </table> </form:form> </body> </html>
B、实现Spring Validator接口:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
import com.users.dao.UserDaoImpl;
import com.users.model.User;
@Component
public class UserValidator implements Validator {
private UserDaoImpl userDaoImpl;
@Autowired
public UserValidator(UserDaoImpl userDaoImpl){
this.userDaoImpl=userDaoImpl;
}
public boolean <span style="color:#FF0000;">supports</span>(Class<?> aClass){
return User.class.equals(aClass);
}
public void <span style="color:#FF0000;">validate</span>(Object userObject, Errors errors) {
User user=(User)userObject;
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "username", "NotEmpty");
if(user.getUsername().length()<6||user.getUsername().length()>32){
errors.rejectValue("username", "Size.userForm.username");
}
if(userDaoImpl.findByUserName(user.getUsername())!=null){
errors.rejectValue("username", "Duplicate.userForm.username");
}
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "NotEmpty");
if (user.getPassword().length() < 8 || user.getPassword().length() > 32) {
errors.rejectValue("password", "Size.userForm.password");
}
}
}
其中用到了消息的本地化,修改AppConfig文件:
添加validation消息列表:
@Bean
public ResourceBundleMessageSource messageSource(){
ResourceBundleMessageSource source=new ResourceBundleMessageSource();
source.setBasenames("localization/messages");
<span style="color:#FF0000;">source.setBasenames("localization/validation");</span>
source.setUseCodeAsDefaultMessage(true);
return source;
}
C、注册数据发送至后台时进行验证:
validator 调用validate方法,验证结果存入BindingResult中:
@RequestMapping(value="/registration",method=RequestMethod.POST)
public String registration(@ModelAttribute("userForm") User userForm,BindingResult bindingResult,Model model){
userValidator.<span style="color:#FF0000;">validate</span>(userForm,<span style="color:#FF0000;">bindingResult</span>);
if(bindingResult.hasErrors()){
return "registration";
}
System.out.println(userForm.getUsername());
userDaoImpl.save(userForm);
return "redirect:/secure/";
}
代码:https://github.com/angleBeibei/SpringSecurity
相关文章推荐
- java形参实参
- java中 MVC基本思想,优点,和具体指什么?
- MyEclipse导入同个项目不同版本的问题
- SpringMVC的具体解析
- hibernate 联合主键配置 sid自增
- Java web中如何读取参数配置
- Java static作用及加载顺序
- Spring Mock单元测试
- Spring Security3权限控制
- java根据ip地质调用百度定位api服务获取地理位置示例
- 你以为在java里用synchronized就能万事大吉了吗?
- java 多线程下载
- JAVA的extends用法
- Maven学习:Eclipse使用maven构建web项目(转)
- Maven学习:Eclipse使用maven构建web项目(转)
- 【Spring】基于注解的Spring AOP的配置和使用
- SpringMVC上传下载
- 2016.7.28 笔记-struts领域对象(问题原因)
- JAVA 取配置文件
- Java通过百度地图API获取地址经纬度