我的grails應用程序必須爲每個域類的許多標準動態腳手架方法定義一些附加行爲。如何替換我自己的自定義動態腳手架方法
我知道我可以複製我需要爲每個控制器添加的方法,事實上這正是我目前所做的。這確實意味着我的自定義代碼被樣板腳手架掩蓋了。
我已經嘗試導入和修改模板,但他們似乎只涉及如果我在我的控制器中生成靜態腳手架。不用說這沒有多大幫助。
攔截器似乎並不是我想要的,因爲它們將動作包含進去而不是插入到動作中。我想過以某種方式攔截GORM電話,但那不是我想要的。
我真正想要做的是將基礎動態腳手架方法替換爲在我希望能夠修改的位置具有鉤子的方法。
下面顯示的是什麼,我想實現
// standard "save" dynamic scaffold method decorated with hooks for custom code
def save() {
def ${propertyName} = new ${className}(params)
saveBeforeSave(${propertyName})
if (!${propertyName}.save(flush: true)) {
render(view: "create", model: [${propertyName}: ${propertyName}])
return
}
saveAfterSave(${propertyName})
flash.message = message(code: 'default.created.message', args: [message(code: '${domainClass.propertyName}.label', default: '${className}'), ${propertyName}.id])
redirect(action: "show", id: ${propertyName}.id)
}
// Placeholders hooks to be overridden in controller as necessary
def saveBeforeSave(${propertyName}) {
}
def saveAfterSave(${propertyName}) {
}
正如我上面提到的,從我可以告訴我修改靜態腳手架,即我可以添加我的修改,然後生成控制器,但它寫**所有**。我不想看到數百行樣板只是爲了添加幾行自定義代碼,尤其是考慮到我無法在混亂中找到自定義代碼。 – 2012-02-15 10:20:29
看到更新的答案 – Wavyx 2012-02-15 10:36:36
這似乎已經完成了。奇怪的是,我之前嘗試過,並沒有奏效。我確實有「靜態scaffold = true」而不是「static scaffold = domainclass」,這可能會有所作爲? – 2012-02-15 10:56:30