2015-08-30 51 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) 
}