Spring 註冊用戶(使用Spring Validator 驗證輸入)

使用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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章