2012-02-15 34 views
2

我的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}) { 
    } 

回答

1

你不能簡單的用命令的例子:

grails install-templates 

然後修改控制器? GuideReference

只是

static scaffold = *MODEL* 

配置控制器,適用於/src/templates/scaffolding/Controller.groovy

您的修改沒有必要生成使用生成控制器

+0

正如我上面提到的,從我可以告訴我修改靜態腳手架,即我可以添加我的修改,然後生成控制器,但它寫**所有**。我不想看到數百行樣板只是爲了添加幾行自定義代碼,尤其是考慮到我無法在混亂中找到自定義代碼。 – 2012-02-15 10:20:29

+0

看到更新的答案 – Wavyx 2012-02-15 10:36:36

+0

這似乎已經完成了。奇怪的是,我之前嘗試過,並沒有奏效。我確實有「靜態scaffold = true」而不是「static scaffold = domainclass」,這可能會有所作爲? – 2012-02-15 10:56:30

1

我剛剛完成了一篇文章有​​關編寫自定義腳手架行爲。內部工作原理是從grails源代碼腳手架插件中複製的。你可以看看實際的grails code heremy article

+1

你的文章說什麼?如果發生鏈接腐爛會發生什麼? – Ivan 2012-11-29 19:51:42

相關問題