Spring MVC 使用Validator接口完成数据校验

Spring MVC 使用Validator接口完成数据校验

创建loginForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix= "form" uri= "http://www.springframework.org/tags/form" %>




测试Validator接口验证


登录页面

登录名:
密码:

创建success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>




测试ConversionService


登录名:${requestScope.user.loginname }
登录名:${requestScope.user.password }

配置springmvc-config.xml









	
	

创建User

package com.po;
public class User {
	private String loginname;
	private String password;
	public String getLoginname() {
		return loginname;
	}
	public void setLoginname(String loginname) {
		this.loginname = loginname;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "User [loginname=" + loginname + ", password=" + password + "]";
	}
}

创建UserValidator

package com.validator;
import org.springframework.stereotype.Repository;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

import com.po.User;
// 实现Spring的Validator接口
@Repository("userValidator")
public class UserValidator implements Validator {

	// 该校验器能够对clazz类型的对象进行校验。
	@Override
	public boolean supports(Class clazz) {
		// User指定的 Class 参数所表示的类或接口是否相同,或是否是其超类或超接口。
		return User.class.isAssignableFrom(clazz);
	}

	// 对目标类target进行校验,并将校验错误记录在errors当中
	@Override
	public void validate(Object target, Errors errors) {
		/**
		使用ValidationUtils中的一个静态方法rejectIfEmpty()来对loginname属性进行校验,
		假若'loginname'属性是 null 或者空字符串的话,就拒绝验证通过 。
		*/
		ValidationUtils.rejectIfEmpty(errors, "loginname", null, "登录名不能为空");  
		ValidationUtils.rejectIfEmpty(errors, "password", null, "密码不能为空");  
		User user = (User)target;
		if(user.getLoginname().length() > 10){
			// 使用Errors的rejectValue方法验证
			errors.rejectValue("loginname", null, "用户名不能超过10个字符");
		}
		if(user.getPassword() != null 
				&& !user.getPassword().equals("") 
				&& user.getPassword().length() < 6){
			errors.rejectValue("password", null, "密码不能小于6位");
		}
	}
}

创建UserController

package com.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import com.po.User;
import com.validator.UserValidator;
@Controller
public class UserController {
	// 注入UserValidator对象
		@Autowired
		@Qualifier("userValidator")
		private UserValidator userValidator;
		
		@RequestMapping(value="/loginForm")
		 public String loginForm(Model model){
			User user = new User();
			model.addAttribute("user",user);
			// 跳转到登录页面
			return "loginForm";
		}
		 
		@RequestMapping(value="/login")
		 public String login(
				 @ModelAttribute User user,
				 Model model,
				 Errors errors) {
			 System.out.println(user);
			 model.addAttribute("user", user);
			 // 调用userValidator的验证方法
			 userValidator.validate(user, errors);
			 // 如果验证不通过跳转到loginForm视图
			 if(errors.hasErrors()){
				 return "loginForm";
			 }
		     return "success";
		 }
}

启动Tomcat访问如下地址

http://localhost:8080/jackson/loginForm

Spring MVC 使用Validator接口完成数据校验_第1张图片

Spring MVC 使用Validator接口完成数据校验_第2张图片

Spring MVC 使用Validator接口完成数据校验_第3张图片

Spring MVC 使用Validator接口完成数据校验_第4张图片

你可能感兴趣的:(spring,mvc)