我怎样才能替换自己的自定义动态脚手架方法

时间:2012-02-15 09:58:38

标签: grails grails-controller

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

2 个答案:

答案 0 :(得分:1)

你不能简单地使用命令:

grails install-templates

然后修改控制器? GuideReference

只需使用

配置您的控制器
static scaffold = *MODEL*

并将修改应用于/src/templates/scaffolding/Controller.groovy

无需生成使用生成控制器

答案 1 :(得分:1)

我刚刚完成了一篇关于编写自定义脚手架行为的文章。内部工作从grails源代码脚手架插件复制。您可以查看实际的grails code heremy article