grails - 从Grails “after”过滤器访问重定向ID

标签 grails redirect filter

我有一个标准的grails(1.3.7)脚手架 Controller ,保存闭包如下:

    def save = {

        // ... instantiate and save "instance" ...

        redirect(action: "show", id: instance.id)
    }

...和一个“之后”过滤器,例如:
        def filters = 
{
    save(controller:'*', action:'save')
    {
        after =
        {
            // How do I get the newly created entity's ID here?     
        }
    }

有没有一种方法可以在任何 Controller 中的过滤器中访问新实体的ID,而不必向每个 Controller 添加任何额外的/特殊的代码?

最佳答案

按照splix的建议将其保存在请求中,或者考虑改用拦截器。在“afterInterceptor”中,您可以直接访问模型。见Controller Interceptors

更新了
根据您的评论,您可以使用元编程技术并拦截域类上的每个“afterInsert”调用。例如,如果将其添加到Bootstrap中:

grailsApplication.domainClasses.each { org.codehaus.groovy.grails.commons.GrailsDomainClass gc ->
    gc.metaClass.afterInsert = {
        println "$id"
    }
}

您应该能够访问所有新创建的域对象并执行常见操作。

关于grails - 从Grails “after”过滤器访问重定向ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9322896/

相关文章:

url - Grails URL 映射和 URL 中的斜杠字符

templates - 替换 <f :all/> tag with normal fields on custom template grails

java - Grails 3.1 和 spring-security-core :3. 0.3

node.js 请求获取重定向链

filter - 在 F# 中处理 Deedle 时间序列中的缺失值 (2)

javascript - 如何在不丢失索引的情况下过滤数组?

grails - 如何使用 quartz 启动在Grails中加载页面的作业

emacs - 如何加载读取 stdin 并在 gdb 中获取参数的程序?

apache - 将 URL 重定向到新地址但保留原始地址

java - 操作ContainerRequestFilter的InputStream