【问题标题】:How can I substitute my own custom dynamic scaffolding methods如何替换我自己的自定义动态脚手架方法
【发布时间】:2012-02-15 09:58:38
【问题描述】:

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

【问题讨论】:

    标签: grails grails-controller


    【解决方案1】:

    你不能简单的使用命令:

    grails install-templates
    

    然后修改控制器? GuideReference

    只需配置你的控制器

    static scaffold = *MODEL*
    

    并将您的修改应用到/src/templates/scaffolding/Controller.groovy

    使用 generate-controller 不需要生成

    【讨论】:

    • 正如我上面提到的,据我所知,这会修改静态脚手架,即我可以添加我的修改,然后生成控制器,但它会写入 所有内容。我不想看到数百行样板代码只是为了添加几行自定义代码,特别是考虑到我将无法在混乱中找到我的自定义代码。
    • 似乎已经做到了。奇怪的是我之前尝试过,然后它没有用。我确实有“静态脚手架 = true”而不是“静态脚手架 = domainclass”也许会有所不同?
    • @MichaelRutherfurd 你能分享完整的代码吗?我正在尝试做同样的事情,但没有成功。谢谢。
    【解决方案2】:

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

    【讨论】:

    • 你的文章到底说了什么?如果发生链接失效会发生什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多