Grails 如何注册自定义约束
我已经创建了一个自定义约束(大多数代码都是从中复制的),我想在我的项目中使用它Grails 如何注册自定义约束,grails,gorm,grails-3.0,grails3,Grails,Gorm,Grails 3.0,Grails3,我已经创建了一个自定义约束(大多数代码都是从中复制的),我想在我的项目中使用它 如何注册此新约束,以便在域类和命令对象中使用它?我试着遵循这一点,但没有成功。我还尝试从中复制代码,但也没有成功。在Config.groovy中添加以下内容: grails.gorm.default.constraints = { validMobilePhone(validator: { value, obj, errors -> if (!value) return
如何注册此新约束,以便在域类和命令对象中使用它?我试着遵循这一点,但没有成功。我还尝试从中复制代码,但也没有成功。在Config.groovy中添加以下内容:
grails.gorm.default.constraints = {
validMobilePhone(validator: { value, obj, errors ->
if (!value) return
value = PhoneNumberUtils.sanitizeNumber(value)
if (!PhoneNumberUtils.validateMobilePhone(value)) {
errors.rejectValue('mobilePhone', "invalid")
}
})
nonNegative(min: new BigDecimal(0))
}
然后在您的域中使用此约束:
static constraints = {
value shared: 'nonNegative'
}
在Config.groovy中添加以下内容:
grails.gorm.default.constraints = {
validMobilePhone(validator: { value, obj, errors ->
if (!value) return
value = PhoneNumberUtils.sanitizeNumber(value)
if (!PhoneNumberUtils.validateMobilePhone(value)) {
errors.rejectValue('mobilePhone', "invalid")
}
})
nonNegative(min: new BigDecimal(0))
}
然后在您的域中使用此约束:
static constraints = {
value shared: 'nonNegative'
}
我在一个Grails3项目中设置了几个自定义约束类,并将它们转发到Grails4 在我的应用程序类中,我将自定义约束注册到2个约束注册中心。在应用程序类上有几个方法可以选择来实现这一点。我不知道我的选择是否是最好的
void doWithDynamicMethods(){
//for domains
applicationContext.getBean(
org.grails.datastore.mapping.validation.ValidatorRegistry
).addConstraintFactory( someConstraintFactory )
//for command objects
(
(DefaultConstraintEvaluator)
applicationContext.getBean(
org.grails.datastore.gorm.validation.constraints.eval.ConstraintsEvaluator
)
).constraintRegistry.addConstraintFactory( someConstraintFactory )
}
我在一个Grails3项目中设置了几个自定义约束类,并将它们转发到Grails4 在我的应用程序类中,我将自定义约束注册到2个约束注册中心。在应用程序类上有几个方法可以选择来实现这一点。我不知道我的选择是否是最好的
void doWithDynamicMethods(){
//for domains
applicationContext.getBean(
org.grails.datastore.mapping.validation.ValidatorRegistry
).addConstraintFactory( someConstraintFactory )
//for command objects
(
(DefaultConstraintEvaluator)
applicationContext.getBean(
org.grails.datastore.gorm.validation.constraints.eval.ConstraintsEvaluator
)
).constraintRegistry.addConstraintFactory( someConstraintFactory )
}
Grails验证(和其他东西)在Grails 3.3之后被重构到GORM,这是一个破坏性的变化,留下了一些重要方面的文档。Grails验证(和其他东西)在Grails 3.3之后被重构到GORM,这是一个破坏性的更改,留下了一些重要方面的文档,Grails4.0.5文档称要将其包含在GrailsApp/conf/runtime.groovy中。如果闭包包含3个参数,则它必须直接作用于errors对象。这意味着属性名是硬连线的——不适合共享验证器。让闭包接受1或2个参数,并根据validator doco返回一个列表或字符串。所有这些都是一个有用的解决方法,但并没有回答最初的问题。如果闭包包含3个参数,则它必须直接作用于errors对象。这意味着属性名是硬连线的——不适合共享验证器。让闭包接受1或2个参数,并根据validator doco返回一个列表或字符串。所有这些都是一个有用的解决方法,但并没有回答最初的问题。