Контроллеры Grails передают параметры - PullRequest
4 голосов
/ 27 мая 2011

Мой контроллер выглядит следующим образом:

def participated = {
  def temp = ConferenceUser.get(params.temp)

  def prizes = Prizes.findAllByConferenceUser(temp) // find all rooms where current computer is
  def subms = Submissions.findAllByConferenceUser(temp) // find all rooms where current computer is

  [temp: temp, priz: prizes, subm: subms]
}

Но каким-то образом, когда я успешно обновляю значение конференции, я хочу вернуться на начальную страницу (участвовал), но я не знаю, как вернуться назадparams.temp.(Если я сделаю простое перенаправление, поскольку контроллер ожидает params.temp, это выдаст мне ошибку, потому что я не могу искать призы с нулевым объектом в качестве параметра. Итак, представьте, что мой контроллер обновлений выглядит следующим образом:

def update = {
  def saveParamshere = params.temp
  ...
  ...
  (code here)
  ...
  ...

  redirect(action: "participated", params: [temp: saveParamshere])
}

Этот код не работает. Как я могу успешно вернуться на свою главную страницу и ввести params.temp?

Ответы [ 2 ]

7 голосов
/ 27 мая 2011

Я думаю, что проблема может быть в том, что вы вызываете update действие, отправив форму (я полагаю). Может быть, вы не передаете temp значение из этой формы? Вы можете сделать это, вставив temp как скрытое поле ввода в форму, или примените его к URL-адресу с помощью атрибута param в теге формы.

Используя скрытое поле, это может быть что-то вроде этого (в вашем файле просмотра):

<g:form controller="somecontroller" action="update">
  (...)
  <g:hiddenField name="temp" value="${temp}" />
  (...)
</g:form>

Использование атрибута params:

<g:form controller="somecontroller" action="update" params="[temp : temp]">
  (...)
</g:form>

Я не тестировал ни одного из них, поэтому могут возникнуть некоторые проблемы, особенно при втором подходе.

2 голосов
/ 27 мая 2011

Вы можете поместить параметры во флеш-область, которая существует для двух запросов, или поместить их в сеанс и получить их таким образом.

Вот ссылка на документы Grails по использованию флеш-области:

Grails - Контроллеры - Области контроллеров

...