2015-08-30 45 views
0

当我使用生成-所有package.DomainObject,它产生其中创建动作产生作为控制器:Grails3生成-所有产生故障创建动作代码

DEF创建(){

respond new DomainObject(params) 

}

当我调用本地主机:8080/domainObject的/创造出不作任何代码更改,它抛出一个异常:

groovy.lang.MissingPropertyException:没有这样的属性:控制器 类:package.DomainObject

它看起来像反省失败的性质PARAMS地图已经和domainObject的没有。这是令人惊讶的,因为在Grails 2中,反省过去只是忽略不匹配的属性,它也用于在字段上进行必要的类型转换(现在如果DomainObject具有int属性,则会抛出类型不匹配异常,因为params地图将它作为字符串传递)。
这真的很不方便。有什么改变或我错过了什么?

回答

0

在Grails中使用地图构造函数和批量设置地图的属性与Groovy中的地图基本相同,但它有逻辑排除'controller','action'和'format'键以保持控制器代码类似于这个整齐。这在3.x和has been reported in the issue tracker打破。它没有被标记为固定的,但在一个简单的3.0.4测试应用程序中正常工作。

作为临时解决办法,你可以复制PARAMS映射,并删除这些项下存储的值,并使用“固定”地图的构造:

def create() { 
    def fixedParams = ([:] + params) // copy 
    ['controller', 'format', 'action'].each { fixedParams.remove it } 
    respond new Thing(fixedParams) 
}