2010-09-22 69 views
0

使用domainClass.properties = params将所有传入请求参数绑定到域类对象是非常常见的。我不明白为什么这个任务会自动更新域对象。例如grails - 数据绑定后的奇怪行为

def update = { 
    def book = Book.get(1) 
    book.properties = params 
    book.discard() 
} 

params分配更新域对象。丢弃方法没有效果。谁能帮我?

+0

当你说“自动更新”时,你的意思是域对象是否被保留?只是试图澄清发生了什么。 – 2010-09-22 13:47:17

+1

我想我们在这里需要更多的上下文。数据连接是什么?它是如何设置的?做book.properties = params除了将对象属性的值设置为params中的内容外别无其他。它不保存对象。 – mfloryan 2010-09-22 14:40:29

+0

是的,“自动更新”意味着doamin对象被持久化。 connectin数据是一个简单的hsqldb。我实施了一个非常简单的例子来清除问题。想象我们这个控制器动作: DEF书= Book.get(1) book.properties =参数 [书:书] futhermore书域类有一个更新前闭合到journalize每次更新。 def beforeUpdate = { log.error“update book” } 这本书只有一个道具 - >字符串标题。在更新被调用之前,每次通过数据绑定更改道具。所以这意味着书obj。得救了吗? – hitty5 2010-09-27 07:04:39

回答

2

discard()方法不会重置书实例,只会阻止它被Grails自动保存。要重置书实例,您需要重新加载它,例如使用Book.get(1)。

而book.properties = params只会尝试将params地图中的元素分配给Book属性,其中属性名称与地图项键相同。我相信这是标准的Groovy功能,而不是Grails特有的。

+0

感谢您的答案。我的问题是,通过数据绑定的obj得到坚持当域obj的一些属性。已经变了。看到我的评论之前。 – hitty5 2010-09-27 07:06:42