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

Posted

技术标签:

【中文标题】Grails 数据绑定:对 domainInstance.properties = params 没有影响【英文标题】:Grails Databinding: no effect on domainInstance.properties = params 【发布时间】:2013-10-31 10:11:14 【问题描述】:

我正在使用 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 版本 1.3.7 中,它按预期工作。

欢迎提出任何建议!

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于Grails 数据绑定:对 domainInstance.properties = params 没有影响的主要内容,如果未能解决你的问题,请参考以下文章

Grails 日期绑定

Grails 与语言环境无关的十进制数据绑定

Grails 3 - 配置嵌入式 Tomcat 绑定地址

如何将 Hibernate Session 绑定到 Grails 中的线程?

是否可以刷新Grails中的属性?

是否有任何“现代”框架支持在编译时检查数据绑定?