【发布时间】: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