验证命令对象中的嵌套域 class 实例
Validate nested domain class instance in command object
我尝试验证命令对象上的嵌套域 class 实例。
有如下命令对象
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
}
}
并且具有以下域 class 及其自身的约束
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
}
}
当刷新不可为空时,我需要命令对象验证日期属性并检查刷新实例中的相应限制
现在尝试在控制器中使用此代码:
def save(SaveEventCommand command) {
if (command.hasErrors() || !command.refreshment.validate()) {
respond ([errors: command.errors], view: 'create')
return
}
// Store logic goes here
}
这里通过 !command.refreshment.validate()
我尝试验证刷新实例,但我得到的结果是没有错误,即使传递的数据不正确也是如此。
感谢任何指导,感谢您的宝贵时间
我能想到的两件事:
- Implement
grails.validation.Validateable
on your command object
- 当您提供无效日期时会发生什么?你能在验证时看到错误吗?
我通常只包含一些代码,这些代码将使用自定义验证器来启动对由另一个命令对象组成的任何 属性 的验证。例如:
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}"
)
}
}
})
这样很明显我希望进行验证。此外,它将所有错误向上移动到根错误集合中,这对我来说非常容易。
我尝试验证命令对象上的嵌套域 class 实例。
有如下命令对象
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
}
}
并且具有以下域 class 及其自身的约束
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
}
}
当刷新不可为空时,我需要命令对象验证日期属性并检查刷新实例中的相应限制
现在尝试在控制器中使用此代码:
def save(SaveEventCommand command) {
if (command.hasErrors() || !command.refreshment.validate()) {
respond ([errors: command.errors], view: 'create')
return
}
// Store logic goes here
}
这里通过 !command.refreshment.validate()
我尝试验证刷新实例,但我得到的结果是没有错误,即使传递的数据不正确也是如此。
感谢任何指导,感谢您的宝贵时间
我能想到的两件事:
- Implement
grails.validation.Validateable
on your command object - 当您提供无效日期时会发生什么?你能在验证时看到错误吗?
我通常只包含一些代码,这些代码将使用自定义验证器来启动对由另一个命令对象组成的任何 属性 的验证。例如:
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}"
)
}
}
})
这样很明显我希望进行验证。此外,它将所有错误向上移动到根错误集合中,这对我来说非常容易。