2009-06-26 69 views
2

在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(闭幕pdClosure)“方法
  • 将pdClosure的委托设置为MyFilters,以便在此闭包中设置名称和年龄属性时,它们将在MyFilters实例上进行设置。

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

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

谢谢, 唐

回答

3

模型传递您的数据似乎相当不错的优雅,易于给我。如果出于某种原因不希望它可用于视图,则甚至可以从过滤器中的模型中删除数据。

0

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

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

相关问题