首先出现在我脑海中的两件事是拦截器和过滤器:
http://grails.org/doc/1.3.7/ref/Controllers/afterInterceptor.html
http://grails.org/doc/latest/guide/6.%20The%20Web%20Layer.html#6.6过滤器
拦截器不起作用,因为您不能使用 withFormat。太糟糕了,因为这是一个更全球化的。
过滤器将在每个控制器的控制器上工作,但至少你会在那个级别上最小化你的重复。
def afterInterceptor = {model, modelAndView ->
withFormat {
html { model }
js { render "alert('hello')" }
xml { render model as XML }
}
}
这在我的测试项目中对我有用。我尝试将这个闭包放入它自己的类中并在类中混合,这样你就可以做一个更全局的解决方案......虽然没有骰子。
也许你所有的 afterInterseptors 都将模型 modelAndView 传递给一个公共类?这似乎有效:)(在回答时努力回答)
@Mixin(AfterInterceptorWithFormat)
class FirstController {
def action1 = {}
def action2 = {}
def afterInterceptor = {model, modelAndView ->
performAfterInterceptor(model, modelAndView)
}
}
class AfterInterceptorWithFormat {
def performAfterInterceptor(model, modelAndView) {
withFormat {
html { model }
js { render "alert('hello')" }
xml { render model as XML }
}
}
}
试一试,让我知道你的想法。