【问题标题】:Optimal way of passing data from a filter to a controller?将数据从过滤器传递到控制器的最佳方式?
【发布时间】:2013-01-08 18:27:41
【问题描述】:

您好,在我们的应用程序的一部分中,我需要将数据从过滤器传递到控制器。我读过这可以通过在控制器上使用请求对象和前拦截器来完成。

一些示例代码:

class SomeService {
    def doSomething(request, params) {
        request.foo = "helloworld"
    }
}

class SomeFilter {

    def someService

    def filters = {
        all(controller:'*', action:'*') {
            before = {
                // service does something and places object in request
                // using request.foo = "helloworld"
                someService.doSomething(request, params)
            }
        }
    }
}

class SomeController {

    def foo

    def beforeInterceptor = {
        foo = request.foo
    }

    def index = { 
        println foo
    }
}

这是一种有效的做事方式还是有其他方式?

【问题讨论】:

    标签: grails filter controller


    【解决方案1】:

    您正在使用的方法(将数据分配给请求属性)是一种高效且广泛使用的方法,用于在各层之间传递特定于请求的数据。

    grails 基于的 Spring 框架广泛使用了这一点。你可以在这里看到它使用的一些属性键:http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/web/util/WebUtils.html

    【讨论】:

    • 我想在请求属性中使用最少的对象是个好习惯。例如,我应该将它用于域对象吗?像用户一样,还是应该在请求对象中传递 UserId?当将完整对象从过滤器传递到控制器时,它会为我节省一个数据库请求。有什么想法吗?
    • 最小的对象可能是一个不错的目标。我通常会避免使用域对象,因为它可能导致难以调试休眠会话和事务错误情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多