首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何短路a @CustomValidator?

如何短路a @CustomValidator?
EN

Stack Overflow用户
提问于 2015-12-23 13:11:46
回答 1查看 194关注 0票数 2

考虑下面的示例,它检查fromDatetoDate是否为有效日期,以及fromDate是否小于toDate

代码语言:javascript
复制
@CustomValidator(type = "DateValidator", 
            fieldName = "fromDate",
         shortCircuit = true),

@CustomValidator(type = "DateValidator", 
            fieldName = "toDate",
         shortCircuit = true),

@CustomValidator(type = "CompareDatesValidator", 
              message = "validate.date.jalali.same.or.before",
         shortCircuit = true, 
           parameters = {
        @ValidationParameter(name = "fromDateParam", value = "${fromDate}"),
        @ValidationParameter(name = "toDateParam", value = "${toDate}") 
               })

DateValidator扩展FieldValidatorSupportCompareDatesValidator扩展ValidatorSupport

虽然我有shortCircuitDateValidators,但是CompareDatesValidator总是运行,这是不正确的。我能修好这个吗?!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-23 17:18:21

正如所解释的,在文件中

平原验证器优先于字段验证器,首先按照定义的顺序进行验证,然后按照定义的顺序对字段验证器进行验证。标记为短路的特定验证器的故障将阻止对后续验证器的评估,并且将错误(动作错误或字段错误取决于验证器的类型)添加到被验证对象的ValidationContext中。

那么您的实际执行命令是:

  1. CompareDatesValidator (平原)
  2. DateValidator (字段fromDate)
  3. DateValidator (字段toDate)

问题是它将首先执行,但是由于它的检查是基于两个字段的复合检查,所以应该首先对字段本身执行原子检查。

但是这就是框架的工作方式,所以需要解决 it问题。

如果是您的普通验证器仍然是这个。 (即使使用一些修改),您可以避免检查,并在输入无效时忽略错误,让这种验证发生在字段验证器中它属于的地方:

代码语言:javascript
复制
public final class CompareDatesValidator extends ValidatorSupport {
    private String fromDate; // getter and setter
    private String toDate;   // getter and setter    

    @Override
    public void validate(Object o) throws ValidationException {
        Date d1 = (Date)parse(fromDate, Date.class);
        Date d2 = (Date)parse(toDate, Date.class);

        if (d1==null || d2==null){
            LOG.debug("Silently disabling Plain Validator. Check performed by Field ones");
        } else if (d2.before(d1)){
            addActionError(getDefaultMessage());
        }
    }
}

您只需记住始终将CompareDatesValidator,的字段验证器放在同一个验证堆栈中,否则“日期无效”错误将被静默吞没。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34436489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档