Grails:嵌套的命令对象
Posted
技术标签:
【中文标题】Grails:嵌套的命令对象【英文标题】:Grails: nested command objects 【发布时间】:2010-12-24 22:44:11 【问题描述】:在我的 grails 应用程序中,我有一个外部命令对象,其中包含其他命令对象的列表:
public class OuterCommand
List<InnerCommand> innerCommands = ListUtils.lazyList([], FactoryUtils.instantiateFactory(InnerCommand))
class InnerCommand
String code
Long id
String value
static constraints =
code(nullable: false, blank: false)
value(nullable: false, blank: false)
innerCommands
的相当不寻常的实例化基于this advice。但是,我发现如果我在 OuterCommand
的实例上调用 validate()
,验证似乎不会验证包含的 InnerCommand
实例。
当validate()
在最外层的对象上被调用时,是否可以嵌套命令对象并验证整个命令对象图?
【问题讨论】:
【参考方案1】:我按照以下步骤完成了这项工作:
使内部命令对象可验证,因为它不像普通命令对象那样被实例化。有两种方法可以做到这一点,使用 @org.codehaus.groovy.grails.validation.Validateable
注释,或者使用 grails 配置参数 grails.validateable.classes
将 innerCommands 的自定义验证器添加到 OuterCommand
static constraints =
innerCommands(validator: val, obj ->
// 'attributes.validation.failed' is the key for the message that will
// be shown if validation of innerCommands fails
return val.every it.validate() ?: ['attributes.validation.failed']
)
【讨论】:
请参阅old.nabble.com/… 进行讨论。【参考方案2】:我不认为 Command 或嵌套命令中的域对象默认得到验证,您必须编写 a validator 循环遍历 innerCommands 并验证它们。
static constraints =
innerCommands(validator:val,obj ->
//validate and merge errors from each innerCommand
)
您可能必须处理 Errors 对象并将所有结果合并在一起,但这并不太难。
【讨论】:
以上是关于Grails:嵌套的命令对象的主要内容,如果未能解决你的问题,请参考以下文章