Grails数据绑定:对domainInstance.properties = params没有影响

时间:2013-10-31 10:11:14

标签: grails data-binding

我正在使用Grails 2.2.2。 我有一个名为“Table”的域和一个自动生成的控制器TableController。问题是,“更新”操作无效。

def update = {
    def tableInstance = Table.get(params.id)
    println params.definition
    if (tableInstance) {
        if (params.version) {
            def version = params.version.toLong()
            if (tableInstance.version > version) {

                tableInstance.errors.rejectValue("version", "default.optimistic.locking.failure", [message(code: 'table.label', default: 'Table')] as Object[], "Another user has updated this Table while you were editing")
                render(view: "edit", model: [tableInstance: tableInstance])
                return
            }
        }
        tableInstance.properties = params
        println tableInstance.definition
        if (!tableInstance.hasErrors() && tableInstance.save(flush: true)) {
            flash.message = "${message(code: 'default.updated.message', args: [message(code: 'table.label', default: 'Table'), tableInstance.id])}"
            redirect(action: "show", id: tableInstance.id)
        }
        else {
            render(view: "edit", model: [tableInstance: tableInstance])
        }
    }
    else {
        flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'table.label', default: 'Table'), params.id])}"
        redirect(action: "list")
    }
}

第一个println有输出:“newValue” 第二个pringln有输出:“oldValue”。

它接缝,以下行中的dataBinding不起作用:

tableInstance.properties = params

在Grails Verions 1.3.7中,它按预期工作。

欢迎任何建议!

1 个答案:

答案 0 :(得分:1)

原因是财产是短暂的。在Grails 2.x中,由于安全问题,瞬态属性不再被绑定。 See this question