Если вы хотите вернуть одну и ту же модель из всех ваших действий, этот подход должен работать:
class ExampleController {
def action5 = {getModel()}
def action1 = {getModel()}
//etc.
private getModel() {
def book = Book.findAllByIsbn(Isbn.get(1))
[book: book]
}
}
Если вы хотите вернуть одну и ту же модель, и визуализируют один и тот же вид извсе ваши действия, вы могли бы возвращать одно и то же ModelAndView
от каждого действия, но тогда я бы спросил, зачем вам отдельные действия, если они все делают одно и то же?
Я не совсем понимаюВаша гипотеза
Это не работает, потому что, и я думаю, он принимает несколько [return1: aaa, return2: bbb]
Если вы предполагаете, что getModel()
может только вернуть модельс одной записью мне трудно в это поверить.Можете ли вы немного рассказать об этом или опубликовать дополнительную информацию (например, stacktrace, unit-тест), которая показывает, как / почему она не работает?
Обновление
После прочтения ваших комментариев ниже я думаю, что янаконец, поймите, чего вы хотите достичь, то есть добавить модель, возвращаемую getModel()
(выше), к модели, возвращаемой различными другими действиями.Работает ли это:
class ExampleController {
def action5 = {
def action5Model = [foo: 'bar']
return addBookModel(action5Model)
}
def action1 = {
def action1Model = [foo2: 'bar2']
return addBookModel(action1Model)
}
//etc.
private Map addBookModel(Map model) {
def book = Book.findAllByIsbn(Isbn.get(1))
model.book = book
return model
}
}
Этот подход будет работать только тогда, когда вы хотите добавить модель книги в один контроллер.Если вы хотите добавить модель книги в несколько контроллеров, вы можете сделать это:
- , поместив
addBookModel
в абстрактный класс, который контроллеры расширяют - , поместив
addBookModel
вкласс, который смешан с контроллерами (используя @Mixin
) - , помещая
addBookModel
в фильтр, который выполняется после действий контроллера