SpringMVC的表单验证

  使用SpringMVC进行表单验证是一定要引入相关jar包。

  第一步:我们首先写出前端的代码(这里是利用springmvc提供的表单元素)

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
    
  <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form:form action="login" method="post" modelAttribute="monster">    
        名字:<form:input path="name"/><form:errors path="name"/><br>                                                                                                                
        年龄:<form:input path="age"/><form:errors path="age"/><br>
        <input type="submit" value="添加">
    </form:form>
</body>
</html>

其中 <form:errors path="name"/>是取出错误信息的。由于这里是由request 域中的Monster对象中进行绑定,而Monster 是你进行验证的pojo类。所以,path里面填写的值必须和Monster的属性值保持一致。

  第二步:对pojo类进行绑定

package com.bean;

import java.util.Date;

import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.validator.constraints.Range;

public class Monster {
    
    
    
    @NotEmpty
    @Size(max = 1)
    private String name;
    private Integer gender;
    
    private Integer age;
    private Date day;
    private float slary;
    
    
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getGender() {
        return gender;
    }
    public void setGender(Integer gender) {
        this.gender = gender;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public Date getDay() {
        return day;
    }
    public void setDay(Date day) {
        this.day = day;
    }
    public float getSlary() {
        return slary;
    }
    public void setSlary(float slary) {
        this.slary = slary;
    }
    public Monster() {
        super();
    }
}

其中   name 上面的@NotEmpty @Size(max = 1)就是你要验证的属性。这里有两中方式。1 . 用i18n国际化 2 不用。不用的话就在每个注解后面加上message。例如:@NotEmpty(message = "名字不能为空")message属性的值就是以后提示的信息。

  第三步:后台

ackage com.action;

import java.util.Map;

import javax.validation.Valid;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.Errors;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;

import com.bean.Monster;

@Controller
@Scope(value = "prototype")
public class myAction {
    
    @RequestMapping(value = "/login")
    public String login(@Validated  Monster monster,BindingResult br)
    {
     if(br.hasErrors())
        {
         return "pages/add";
        }
        
        System.out.println(monster.getName());
        return "pages/ok";
    }
    @RequestMapping(value = "/lo")
    public String lo(Map<String,Object> map)
    {
        map.put("monster", new Monster());
        return "pages/add";
    }
}

对目标方法添加@Validated 注解。BindingResult br 是对错误信息的绑定。你的错误信息都会在这里保存。

  第四步:配置文件

   在你的.xml文件添加<mvc:annotation-driven />这个标签。如果用的i18n的方式,则在添加一下代码

<bean id="messageSource" class=
        "org.springframework.context.support.ResourceBundleMessageSource">
        <!-- 配置国际化文件名字  id必须为messageSource
如果你这样配中的话,表示messageSource回到(i18n文件的路径)src/i18n.properties去读取错误信息
--> <property name="basename" value="i18n"></property> </bean>

 

 如果用的i18n方式,还要取i18n中添加提示信息。规则是:验证类型.表单的modelAttribute的值.属性值=加验证信息。例如:NotEmpty.monster.name=名字不能为空。

完成以上就可以完成验证了。

 

@NotEmpty
    @Size(max = 1)
posted @ 2020-02-25 15:10  世界,你好啊  阅读(279)  评论(0)    收藏  举报