我尝试验证命令对象上的嵌套域类实例。
具有以下命令对象
package demo
import grails.databinding.BindingFormat
class SaveEventCommand {
@BindingFormat('yyyy-MM-dd')
Date date
Refreshment refreshment
static constraints = {
date validator: { date -> date > new Date() + 3}
refreshment nullable: true
}
}
并且具有以下具有自己约束的 Realm 类
package demo
class Refreshment {
String food
String drink
Integer quantity
static constraints = {
food inList: ['food1', 'food2', 'food3']
drink nullable: true, inList: ['drink1', 'drink2', 'drink3']
quantity: min: 1
}
}
当刷新不可为空时,我需要命令对象验证date属性并检查刷新实例中的相应限制
现在,尝试在 Controller 中使用以下代码:
def save(SaveEventCommand command) {
if (command.hasErrors() || !command.refreshment.validate()) {
respond ([errors: command.errors], view: 'create')
return
}
// Store logic goes here
}
在这里,我通过
!command.refreshment.validate()
尝试验证刷新实例,但即使没有传递正确的数据,也得到没有错误的结果。谢谢你的指导,谢谢你的时间
最佳答案
我通常只包含一些代码,这些代码将使用自定义验证器来启动对由另一个命令对象组成的任何属性的验证。例如:
thePropertyInQuestion(nullable: true, validator: {val, obj, err ->
if (val == null) return
if (!val.validate()) {
val.errors.allErrors.each { e ->
err.rejectValue(
"thePropertyInQuestion.${e.arguments[0]}",
"${e.objectName}.${e.arguments[0]}.${e.code}",
e.arguments,
"${e.objectName}.${e.arguments[0]}.${e.code}"
)
}
}
})
这样,很明显我希望进行验证。另外,它将所有错误上移到根错误集合中,这对我来说 super 容易。
关于validation - 验证命令对象中的嵌套域类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46902602/