【发布时间】:2017-10-02 19:07:48
【问题描述】:
This question 看起来有些相似,但那里的提问者试图了解当域对象是控制器操作参数时一对多数据绑定是如何工作的。
我想了解,当 Domain 类作为参数提供给 Controller 操作时,会调用哪些方法。考虑默认的 update 操作:
def update(MyDomain myDomain) {
if (myDomain == null) {
notFound()
return
}
try {
myDomainService.save(myDomain)
} catch (ValidationException e) {
respond myDomain.errors, view:'edit'
return
}
request.withFormat {
form multipartForm {
flash.message = message(code: 'default.updated.message', args:
[message(code: 'myDomain.label', default: 'MyDomain'), myDomain.id])
redirect myDomain
}
'*'{ respond myDomain, [status: OK] }
}
}
导致上述控制器操作范围的事件顺序是什么?我的最佳猜测如下,但我想确认一下。
def someActionWrapper() {
MyDomain instance = MyDomain.get(params.id)
instance.properties = params
update(instance)
}
我认为它必须去数据库获取表单上没有的任何字段,然后用表单上的任何值覆盖,然后调用实际的控制器操作。
编辑
当被问到这个问题时库的当前版本:
- Grails 3.3.1
- Groovy 2.4.12
【问题讨论】:
-
“我认为它必须去数据库获取表单上没有的任何字段,然后用表单上的任何值覆盖,然后调用实际的控制器操作。” - 这是真的。它将进入数据库以检索所有字段,而不仅仅是那些不在表单上的字段。我在下面的回答提供了更多细节。
标签: grails data-binding controller