我知道Grails v2.3 introduced some changes数据绑定的工作方式,但是当我将域obj作为action参数时,我正在努力弄清楚如何使自动关联绑定工作。例如,有几个简单的域对象:
class Author {
String name
List books
static hasMany = [books: Book]
}
class Book {
String name
static belongsTo = [author: Author]
}
和控制器操作:
def doSomething(Author a) {
// only simple properties appear to be bound at this point
}
如果传入的param
obj为[id:4, name:Stephen King]
,则将加载ID为4的作者obj,并将名称设置为“Stephen King”。但是,如果我尝试设置一个书籍参考,生成一个param
obj,如下所示:[id:4, name:Stephen King, books[0].id:21, books[0]:[id:21]]
,只会绑定名称更改;书籍协会保持不变。 (同样值得注意的是a.hasErrors() == false
。)
但是,如果我将控制器操作调整为:
def doSomething(Author a) {
a.properties = params
// now the books association is bound
}
数据绑定按预期工作......但这种方法违背了使用动作参数的目的。
我做错了什么?