【问题标题】:pass data from controller to filter将数据从控制器传递到过滤器
【发布时间】:2009-06-26 15:33:27
【问题描述】:

在 Grails 应用程序中,我正在寻找某种方法将数据从控制器操作传递到在操作之后运行的过滤器。我在想类似的东西:

class MyController {
    def myAction = {
        render(view:"myView", model:[key: "value"])

        passData {
            // Do some processing here
            name = "paolo"
            age = 38
        }
    }
}

public class MyFilters {

    def name
    def age

    def filters = {
        myFilter(controller: "*", action: "*") {
            after = { model ->
                // Do something with name and age
                return true
            }
        }
    }
}

最初的计划是在 BootStrap.config 的 init() 闭包中执行以下操作:

  • 使用元编程向所有控制器添加“passData(Closure pdClosure)”方法
  • 将 pdClosure 的委托设置为 MyFilters,以便在此闭包中设置 name 和 age 属性时,它们会在 MyFilters 实例上设置。

但是,我意识到这行不通,因为我没有明显的方法来访问(从 BootStrap.init)将为特定控制器调用的 MyFilters 实例。

同样,似乎没有任何方法可以从过滤器中访问控制器实例。当然,我可以将所有数据都填充到模型中,但我想知道是否有更优雅的方式在两者之间传递数据?

谢谢, 唐

【问题讨论】:

    标签: grails groovy metaprogramming


    【解决方案1】:

    在模型中传递您的数据对我来说似乎非常优雅和容易。如果您出于某种原因不希望数据对视图可用,您甚至可以从过滤器中的模型中删除数据。

    【讨论】:

      【解决方案2】:

      如果您想在过滤器中修改模型数据,那么您的解决方案看起来不错。

      但是,如果您只想将一些参数从控制器传递给过滤器,那么请求属性应该更好(如果您只需要请求范围内的数据)。这样您就不会将模型与一些请求参数混合在一起。

      【讨论】:

        猜你喜欢
        • 2013-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-28
        • 2015-11-06
        • 1970-01-01
        • 2012-08-01
        相关资源
        最近更新 更多