2012-02-15 37 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

相关问题