Grails - Контроллер цепи и исчезновение модели - PullRequest
5 голосов
/ 05 октября 2011

Я пытаюсь использовать функцию chain для вызова другого метода и рендеринга объединенной модели. Вот как я называю chain:

Контроллер: emailToNotify, Метод: sendEmailConfirmation

if (someCommandObject.hasErrors())
                chain(controller: "creditProvider", action: "rank", model: [emailToNotify: epnc, somethingToDisplay: "Boom !!!!"])

Вот как мой rank метод заканчивается в моем creditProvider контроллере:

Контроллер: creditProvider, действие: rank

render (view: 'simulateResult', model: [bim : bam, boom : bimbamboom])

Мне не удается позвонить ${emailToNotify} или ${somethingToDisplay} из моего simulateResult.gsp представления.

Я уже использовал chain до этого точно таким же образом, и он работал (и все еще работает) должным образом.

Есть идеи, почему модель не передана в представление?

Любая помощь приветствуется, как всегда. Всего наилучшего,

Ответы [ 2 ]

11 голосов
/ 05 октября 2011

chain работает только в том случае, если последнее действие возвращает Map, а не в том случае, если последнее действие использует вызов render.Чтобы заставить работать то, что вы делаете, вам нужно вручную объединить неявную переменную chainModel с моделью, которую вы возвращаете, в render.

1 голос
/ 05 марта 2013

У меня была та же проблема с этим и я обнаружил, что один из способов обойти это - использовать объект Spring ModelAndView.Из firstController:

chain(controller: second, action: 'chainedMethod', model: [modelField2: '2'])

Затем во втором контроллере:

import org.springframework.web.servlet.ModelAndView
...
def chainedMethod() {
  return new ModelAndView('/other/view', [modelField1: '1'])
}

Это работает для меня, используя Grails 2.1.1, поэтому не могу сказать, насколько хорошо он работает с другими версиями.Надеюсь, что это помогает другим людям, пришлось копаться и пробовать несколько разных маршрутов, прежде чем получить это.

...