验证顺序
Order of validations
验证的执行顺序是否始终相同?它是如何排序的?
对于这些约束:
static constraints = {
A ...
B ...
C ...
}
它们总是按照A -> B -> C的顺序执行吗?
为什么我需要它?
在 A 的验证中,我需要检查数据库是否存在标识符。如果不是,我将无法通过验证。 B 和 C 取决于查找的值。
鉴于 Grails 本身不能保证顺序,并且可能会在版本之间更改,您对它的任何依赖充其量都是脆弱的。
这表明您处理问题的方式不正确。
鉴于您的字段 B 和 C 取决于 A 的情况,正确的解决方案是为 A 实施一个自定义验证器,该验证器考虑了所有三个。
像这样:
a(validator: { val, obj, errors ->
if (!val ...) {
errors.rejectValue('a', 'whatever.problem')
return
}
if (!obj.b ...) {
errors.rejectValue('b', 'some.other.problem')
return
}
if (!obj.c ...) {
errors.rejectValue('c', 'another.problem')
return
}
})
验证的执行顺序是否始终相同?它是如何排序的?
对于这些约束:
static constraints = {
A ...
B ...
C ...
}
它们总是按照A -> B -> C的顺序执行吗?
为什么我需要它?
在 A 的验证中,我需要检查数据库是否存在标识符。如果不是,我将无法通过验证。 B 和 C 取决于查找的值。
鉴于 Grails 本身不能保证顺序,并且可能会在版本之间更改,您对它的任何依赖充其量都是脆弱的。
这表明您处理问题的方式不正确。
鉴于您的字段 B 和 C 取决于 A 的情况,正确的解决方案是为 A 实施一个自定义验证器,该验证器考虑了所有三个。
像这样:
a(validator: { val, obj, errors ->
if (!val ...) {
errors.rejectValue('a', 'whatever.problem')
return
}
if (!obj.b ...) {
errors.rejectValue('b', 'some.other.problem')
return
}
if (!obj.c ...) {
errors.rejectValue('c', 'another.problem')
return
}
})