vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > el-form表单验证的validator与validate使用问题

关于el-form表单验证中的validator与validate使用时的问题

作者:lerojon

这篇文章主要介绍了关于el-form表单验证中的validator与validate使用时的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

el-form表单验证中的validator与validate使用问题

当在使ElementUI el-form组件用自定义表单验证规则的时候,必须保证自定义校验规则的每一层都调用了callback方法,否则会导致el-form组件的validate方法无法进入回调函数。

//这样写才能进入validate回调
certfNo: [
          { required: true, message: "证件号码不能为空", trigger: "blur" },
          {
            trigger: "blur",
            validator: function(rule, value, callback) {
              if (!validIdCard(value)) {
                return callback(new Error("请输入正确的证件号码"));
              }
               //外面一层也要调用回调
              return callback();
            }
          }
        ]
//如果是这样写的话是无法validate回调的
certfNo: [
          { required: true, message: "证件号码不能为空", trigger: "blur" },
          {
            trigger: "blur",
            validator: function(rule, value, callback) {
              if (!validIdCard(value)) {
               callback(new Error("请输入正确的证件号码"));
              }
            }
          }
        ]

记Validator.validate造成的重大问题

问题场景 

类A继承类B,类A,B有相同的字段,并且都用了@NotBlank注解。

在参数都设置正确的情况下,使用Validator.validate校验类A参数是否符合规则时,报错参数不符合规则

代码如下

//实体类
@Data
public class A extends B {
    @NotBlank
    private String name;
    private String score;
    @Valid
    private C c;
}
@Data
public class B {
    @NotBlank
    private String name;
    private String score;
}
@Data
public class C {
    @NotBlank
    private String age;
    private String sex;
}
//设置值
public .... pottBean(){
     A a=new A();
     a.setName("小明");
    check(a);
}
//校验方法
public .....check(Object obj){
    Validator validator =  Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<Object>> constraintViolations = validator.validate(obj);
  //这个地方校验出来的,就是不符合规则的参数名,发现name也在其中,我也设置了值 ,百思不解
}

后来查找多方资料得知,Validator的验证组概念。

Bean Validation 规范中一个重要的概念,就是组和组序列。组定义了约束的子集。

对于一个给定的 Object Graph 结构,有了组的概念,则无需对该 ObjectGraph 中所有的约束进行验证,只需要对该组定义的一个子集进行验证即可。

完成组别验证需要在约束声明时进行组别的声明,否则使用默认的组 Default.class。组也有继承的属性。

对某一组别进行约束验证的时候,也会对其所继承的基类进行验证。所以当我校验A参数时候,会对基类B进行校验

苦逼的我又一次栽在这个地方了,当需要校验实体类中的包含的对象时候,需要在该对象上添加@Valid注解 , 长点心吧~

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文