Первые две вещи, которые всплыли в моей голове, были перехватчики и фильтры:
http://grails.org/doc/1.3.7/ref/Controllers/afterInterceptor.html
http://grails.org/doc/latest/guide/6.%20The%20Web%20Layer.html#6.6 Фильтры
Перехватчики не будут работать, потому чтоВы не можете сделать с форматом.Облом, потому что это более глобально.
Фильтры будут работать на контроллере для каждого контроллера, но по крайней мере вы минимизируете дублирование на этом уровне.
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 }
}
}
}
Дайте этому повод и дайте мне знать, что вы думаете.