最初に頭に浮かんだのは、Interceptor と Filters の 2 つです。
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 }
}
}
}
それを試して、あなたの考えを教えてください。