grails - 如何替换我自己的自定义动态脚手架方法

标签 grails grails-controller

我的 grails 应用程序必须为每个域类的许多标准动态脚手架方法定义一些附加行为。

我知道我可以复制需要为每个 Controller 添加的方法,事实上这就是我目前所做的。这确实意味着我的自定义代码被样板脚手架遮盖了。

我也尝试过导入和修改模板,但它们似乎只有在我在 Controller 中生成静态脚手架时才会参与。不用说,这没有多大帮助。

拦截器似乎也不是我想要的,因为它们封闭了 Action 而不是插入其中。我考虑过以某种方式拦截 GORM 调用,但这也不是我真正想要的。

我真正想做的是用在我想要修改的地方有钩子(Hook)的方法替换基本的动态脚手架方法。

下面显示了我想要实现的目标的示例

    // 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 install-templates

然后修改 Controller ? GuideReference

只需配置您的 Controller

static scaffold = *MODEL*

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

使用generate-controller不需要生成

关于grails - 如何替换我自己的自定义动态脚手架方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9291240/

相关文章:

ajax - 通过Grails中的AJAX调用刷新g:each标签

grails - Grails Controller 名称中可以有数字吗

grails - 3.0.0.M1 : SSL - Invalid keystore format

Grails 和 Spring Security : license/usage agreement support

grails - 登录页面将在Chrome中访问favicon

grails - 无法在 Grails Controller 中读取 PUT XML 请求

Grails 使用 spring-security-core-3.0.6+ 重定向注销后

hibernate - 单向一对多

grails - 在单个附加程序上使用多个记录器