Grails共享自定义验证器

问题描述 投票:1回答:1

我有多个域对象,其名称的开始和结束日期不同。我想创建一个共享的自定义验证器,该验证器接受两个日期并对其进行验证。

所有文档似乎都指出验证程序闭包中的第二个参数是当前对象。有没有办法做到以下几点?如果是这样,则域对象中的约束关闭看起来如何?

grails.gorm.default.constraints = {
    '*'(nullable: true)
    endDateValidator(
        validator: { endDateValue, startDateValue ->
            if(!(endDateValue?.after(startDateValue))){
                return 'end.date.before.start.date.error'
            }
            else{
                return true
            }
        }
    )
}
customvalidator
1个回答
0
投票

我想您仍然需要为每个域类创建一个验证器,因为它们每个都有不同的命名属性。但是,您可以在这些验证器之间共享验证业务逻辑。


示例:

共享验证逻辑将转到static boolean validateDateOrdering(Date first, Date second)方法,验证器可能看起来像:

 fooValidator(
    validator: { value, domainInst ->
         validateDateOrdering(value, domainInst['bar'])
    }
 )
 barValidator(
    validator: { value, domainInst ->
         validateDateOrdering(domainInst['foo'], value)
    }
 )
© www.soinside.com 2019 - 2024. All rights reserved.