spring mvc:数据验证

做学生登录信息必填项验证。

student信息有:id,姓名,年龄

Student.java

public class Student {

	
	private Integer id;
	private Integer age;
	private String name;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	
}

  StudentValidator.java数据验证代码

import org.springframework.stereotype.Service;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

@Service
public class StudentValidator implements Validator 
{

	
	public boolean supports(Class<?> clazz){
		return Student.class.isAssignableFrom(clazz);
	}

	public void validate(Object target, Errors errors) {        
	      ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "required.name","Field name is required.");
	}

}

  注意:StudentValidator 需要加@Service注解,否则自动装载会报错,找不到bean

自动注入的时候,找不到对应的bean
原因是:对应要注入的实现类没有 加注解,如dao层 @Repository  如service层  @Service
 
StudentController.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.Validator;
import org.springframework.validation.annotation.Validated;


@Controller
public class StudentController {

		@Autowired
		@Qualifier("studentValidator")
		private Validator validator;
	
		
		@InitBinder
		private void initBinder(WebDataBinder binder) {
		      binder.setValidator(validator);
		}
	
		//前端from数据引用:commandName
		 @ModelAttribute("student")
		   public Student createStudentModel() {    
		      return new Student();
		   }
	
	
		@RequestMapping(value = "/student", method = RequestMethod.GET)
	   public ModelAndView student() {
	      return new ModelAndView("student", "command", new Student());
	   }

	  

	   @RequestMapping(value = "/addStudent", method = RequestMethod.POST)
	   public String addStudent(@ModelAttribute("student") @Validated Student student, 
	      BindingResult bindingResult, Model model) {

	      if (bindingResult.hasErrors()) {
	         return "student";
	      }
	      model.addAttribute("name", student.getName());
	      model.addAttribute("age", student.getAge());
	      model.addAttribute("id", student.getId());

	      return "student_result";
	   }
	
	
	
}

  下面来看看jsp代码

student.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ 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=utf-8">
<title>Spring MVC表单处理</title>
</head>
<style>
.error {
    color: #ff0000;
}

.errorStyle {
    color: #000;
    background-color: #ffEEEE;
    border: 3px solid #ff0000;
    padding: 8px;
    margin: 16px;
}
</style>
<body>

    <h2>学生信息</h2>
    <form:form method="POST" action="/hello/addStudent"  commandName="student">
        <form:errors path="*" cssClass="errorStyle" element="div" />
        <table>
            <tr>
                <td><form:label path="name">姓名:</form:label></td>
                <td><form:input path="name" /></td>
                <td><form:errors path="name" cssClass="error" /></td>
            </tr>
            <tr>
                <td><form:label path="age">年龄:</form:label></td>
                <td><form:input path="age" /></td>
            </tr>
            <tr>
                <td><form:label path="id">编号:</form:label></td>
                <td><form:input path="id" /></td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit" value="提交" /></td>
            </tr>
        </table>
    </form:form>
</body>
</html>

  

这一块的代码:<form:form method="POST" action="/hello/addStudent" commandName="student">,其中commandName中的student是,studentController中的createStudentModel的定义.
这一块的代码:<form:errors path="*" cssClass="errorStyle" element="div" />,cssClass为样式代码,element元素为div.
 
student_result.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ 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=utf-8">
<title>spring mvc表单处理</title>
</head>
<body>


<h2>提交的学生信息</h2>
<table>
	<tr>
		<td>名称:</td>
		<td>${name}</td>
	</tr>
	<tr>
		<td>年龄:</td>
		<td>${age}</td>
	</tr>
	<tr>
		<td>编号:</td>
		<td>${id}</td>
	</tr>
</table>

</body>
</html>

  

posted @ 2018-04-20 18:41  穆晟铭  阅读(174)  评论(0编辑  收藏  举报