SpringMVC_18_JSR303数据校验 和 提示消息的国际化

作用,在注册界面判断你的注册数据是否合法,比如是否符合一个基本的邮箱格式。

  • JSR 303 是Java为Bean数据合法性校验提供的标准框架,它已经包含在JavaEE6.0中.

  • JSR 303 通过在Bean属性上标注类似于@NotNull、@Max等标准的注解指定校验规则,并通过标准的验证接口对Bean进行验证。

在这里插入图片描述

  • Hibernate Validator是JSR 303 的一个参考实现,除支持所有标准的校验注解外,它还支持以下的扩展注解

在这里插入图片描述

一、如何校验?注解?

①使用JSR 303 验证标准

②加入hibernate validator验证框架的jar包

在这里插入图片描述

③在SpringMVC配置文件中添加mvc:annotation-driven/

④需要在bean的属性上添加对应的注解

package com.springmvc.crud.entities;

import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.NumberFormat;

import javax.validation.constraints.Past;
import java.util.Date;

public class Employee {

    private Integer id;

    @NotEmpty //注意这里
    private String lastName;

    @Email //注意这里
    private String email;

    //1 male 0 female
    private Integer gender;

    private Department department;

    @Past  //注意这里
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birth;


    @NumberFormat(pattern = "#,###,###.#")
    private Float salary;

省略get/set,toString

    public Employee(Integer id, String lastName, String email, Integer gender, Department department) {
        this.id = id;
        this.lastName = lastName;
        this.email = email;
        this.gender = gender;
        this.department = department;
    }

    public Employee() {
    }
}

⑤在目标方法bean类型的前面添加@valid注解

之前的代码

@RequestMapping(value = "/emp",method = RequestMethod.POST)
public String save(Employee employee, BindingResult result){

    System.out.println(employee);

    if(result.getErrorCount()>0){
        System.out.println("出错了!");

        for(FieldError error:result.getFieldErrors()){
            System.out.println(error.getField()+":"+error.getDefaultMessage());
        }
    }

    employeeDao.save(employee);
    return "redirect:/emps";
}

现在的代码

@RequestMapping(value = "/emp",method = RequestMethod.POST)
public String save(@Valid Employee employee, BindingResult result){  //注意这里

    System.out.println(employee);

    if(result.getErrorCount()>0){
        System.out.println("出错了!");

        for(FieldError error:result.getFieldErrors()){
            System.out.println(error.getField()+":"+error.getDefaultMessage());
        }
    }

    employeeDao.save(employee);
    return "redirect:/emps";
}

运行结果

在这里插入图片描述

在这里插入图片描述

二、验证出错转向到哪一个页面?

可以利用BindingResult 当出现了提交错误,在这里处理错误进行转发页面等等。

@RequestMapping(value = "/emp",method = RequestMethod.POST)
public String save(@Valid Employee employee, BindingResult result,
                   Map<String,Object> map){

    System.out.println(employee);

    if(result.getErrorCount()>0){
        System.out.println("出错了!");

        for(FieldError error:result.getFieldErrors()){
            System.out.println(error.getField()+":"+error.getDefaultMessage());
        }

        //若验证出错,则转向定制的页面
        map.put("departments",departmentDao.getDepartments());
        return "input";

    }

    employeeDao.save(employee);
    return "redirect:/emps";
}

或者

@RequestMapping(value = "/emp",method = RequestMethod.POST)
public String save(@Valid Employee employee, Errors result,  //注意这里的EEors
                   Map<String,Object> map){

    System.out.println(employee);

    if(result.getErrorCount()>0){
        System.out.println("出错了!");

        for(FieldError error:result.getFieldErrors()){
            System.out.println(error.getField()+":"+error.getDefaultMessage());
        }

        //若验证出错,则转向定制的页面
        map.put("departments",departmentDao.getDepartments());
        return "input";

    }

    employeeDao.save(employee);
    return "redirect:/emps";
}

三、错误消息?如何显示,如何把错误消息进行国际化

错误消息的显示:

在input.jsp页面添加以下标签即可。path="*"的时候意味着显示所有的错误信息。

<form:errors path="*"></form:errors>

在这里插入图片描述

要是我们想要错误消息显示到相应的位置呢?只需要在相应的jsp源代码相应的text后面,添加

<form:errors path="指定的名称"></form:errors>
LastName: <form:input path="lastName"/>
<form:errors path="lastName"></form:errors>
Email:<form:input path="email"/>
<form:errors path="email"></form:errors>
Birth:<form:input path="birth"/>
<form:errors path="birth"></form:errors>

在这里插入图片描述

by the way:提示消息的国际化

第一步:新建一个i18n.properties

写入国际化的资料

NotEmpty.employee.lastName=^^LastName姓名不能为空
Email.employee.email=Email地址不正确
Past.employee.birth=Birth不能输入一个将来的时间

第二步,在springmvc.xml中配置这个资源文件

<!--配置国际化资源文件-->
<bean id="messageSource"
    class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="i18n"></property>
</bean>

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42036647/article/details/85924677