使用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" %>
<%@ 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