springmvc 10 表单与验证

表单

表单用的是springmvc的form标签

  1. 引入springmvc的form标签
  2. 在form标签中使用modelAttribute属性指明表单对应的bean对象
  3. 如果bean对象是空值,那么表单没有内容
    如果bean对象有内容,那么表单回显内容
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>




Insert title here


    
        
        name:
email:

@Controller
public class Test {
    
    @RequestMapping(value="/test")
    public String test(Map map){

//      map.put("employee", new Employee());//"employee"是表单对应的bean名称
        
        Employee employee = new Employee();
        employee.setEmpName("dd");
        employee.setEmpEmail("[email protected]");
        map.put("employee", employee);
        return "test";
    }
}
springmvc 10 表单与验证_第1张图片
Paste_Image.png
Paste_Image.png

JSR-303进行校验:

1. 新加hibernate-validator jar包
到官网下载>http://hibernate.org/validator/

springmvc 10 表单与验证_第2张图片
Paste_Image.png

springmvc 10 表单与验证_第3张图片
Paste_Image.png

2. 开启

3. 在bean属性中添加对应的注解

    @Email //表单验证-邮箱格式
    @NotEmpty //表单验证-不能为空
    private String empEmail;
空检查
@Null       验证对象是否为null
@NotNull    验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty 检查约束元素是否为NULL或者是EMPTY.
 
Booelan检查
@AssertTrue     验证 Boolean 对象是否为 true  
@AssertFalse    验证 Boolean 对象是否为 false  
 
长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内  
@Length(min=, max=) Validates that the annotated string is between min and max included.
 
日期检查
@Past           验证 Date 和 Calendar 对象是否在当前时间之前  
@Future     验证 Date 和 Calendar 对象是否在当前时间之后  
@Pattern    验证 String 对象是否符合正则表达式的规则
 
数值检查,建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为“”时无法转换为int,但可以转换为Stirng为"",Integer为null
@Min            验证 Number 和 String 对象是否大等于指定的值  
@Max            验证 Number 和 String 对象是否小等于指定的值  
@DecimalMax 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度
@DecimalMin 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度
@Digits     验证 Number 和 String 的构成是否合法  
@Digits(integer=,fraction=) 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。
 
@Range(min=, max=) Checks whether the annotated value lies between (inclusive) the specified minimum and maximum.
@Range(min=10000,max=50000,message="range.bean.wage")
private BigDecimal wage;
 
@Valid 递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证)
@CreditCardNumber信用卡验证
@Email  验证是否是邮件地址,如果为null,不进行验证,算通过验证。
@ScriptAssert(lang= ,script=, alias=)
@URL(protocol=,host=, port=,regexp=, flags=)

4. 在目标方法bean类型前面添加@Valid注解

public String save(@Valid Employee employee)

补充
还可以结合BindingResult,如果表单验证出错将会在后台和前台显示出错误信息;这里还要用到一个标签


        name:
        
email:
gender:
    /**添加Employee*/
    @RequestMapping(value="/emp",method=RequestMethod.POST)
    public String save(@Valid Employee employee,BindingResult result,Map map){
        if (result.getFieldErrorCount()>0){
            for (FieldError error:result.getFieldErrors()){
                System.out.println(error.getField()+":"+error.getDefaultMessage());
            }
            
            Map genders = new HashMap();
            genders.put(0, "Female");
            genders.put(1, "Male");
            
            map.put("genders", genders);
            map.put("depts", departmentDao.getAll());
            
            //跳到要显示错误的页面(不能使用redirect)
            return "input";//
        }
        employeeDao.save(employee);
        return "redirect:/list";
    }
//empEmail:不是一个合法的电子邮件地址
//empEmail:不能为空
//empName:不能为空
//!!! @Valid修饰的bean对象必须紧挨着BindingResult对象
springmvc 10 表单与验证_第4张图片
Paste_Image.png

自定义显示错误信息

前面已经在后台和前台输出了表单验证的错误信息,但是错误信息的内容是已经内置好的,现在我们要自定义一份自己的表单验证错误信息

  1. 配置国际化资源文件
    
    
        
    
  1. src下创建errors.properties资源文件
NotEmpty.employee.empName=\u8BF7\u8F93\u5165\u7528\u6237\u540D
NotNull.employee.empGender=\u8BF7\u9009\u62E9\u6027\u522B
NotEmpty.employee.empEmail=\u8BF7\u8F93\u5165\u90AE\u7BB1
Email.employee.empEmail=\u8BF7\u8F93\u5165\u6B63\u786E\u683C\u5F0F\u7684\u90AE\u7BB1
//格式:标签注解(不要@).bean名.bean对应属性
required:必要的参数不存在,如@RequiredParam("param1")标注
了一个入惨,但是该参数不存在
typeMismatch:在数据绑定时,发生数据类型不匹配的问题,如日期格式不匹配
methodInvocation:Spring MVC在调用处理方法时发生了错误******

换个姿势再来一次

springmvc 10 表单与验证_第5张图片
Paste_Image.png

你可能感兴趣的:(springmvc 10 表单与验证)