从“grails”过滤器访问grails中的重定向id

时间:2012-02-17 04:27:13

标签: grails redirect filter

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

    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?     
        }
    }

有没有办法在任何控制器的过滤器中访问新实体的ID,而无需向每个控制器添加任何额外/特殊代码?

2 个答案:

答案 0 :(得分:3)

您可以将其放入request,例如

request.setAttribute('CREATED_ID', instance.id)

并以

作为过滤器
def id = request.getAttribute('CREATED_ID')

更新

或者您也可以在beforeInsert活动或您自己的活动听众处提出要求:http://grails.org/doc/latest/guide/GORM.html#eventsAutoTimestamping

答案 1 :(得分:1)

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

<强>更新 根据您的评论,您可以使用元编程技术并拦截对域类的每个'afterInsert'调用。例如,如果您在Bootstrap中添加它:

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

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