Методы контроллера Grails - PullRequest
       12

Методы контроллера Grails

8 голосов
/ 30 августа 2009

Многие из доступных методов контроллера (цепочка, пересылка, перенаправление) берут карту, которая может включать такие ключи, как:

  • ID
  • Титулы
  • модель

Пара вопросов по этому поводу:

  • Является ли 'id' просто псевдонимом для параметра запроса с именем 'id'? Другими словами, есть ли разница между:

chain(controller: "member", action: "showProfile", params: [id: memberId])

и

chain(controller: "member", action: "showProfile", id: memberId)

  • Метод chain (возможно, среди прочих) позволяет передавать модель и / или параметры (карту) из действия контроллера A в B. Практически говоря, в чем разница между передачей данных из действия A в B через параметры и модельные карты? Кроме того, если данные передаются в карте модели, как я могу получить к ним доступ в действии контроллера B?

Ответы [ 2 ]

9 голосов
/ 31 августа 2009

Все, что сказал Берт, правильно. Кроме того, причина, по которой вы хотите сделать цепочку (если у вас есть модель) или перенаправление (если у вас нет модели для сохранения), заключается в том, что оба эти метода возвращают 302-ответный запрос перенаправления в браузер. , Затем браузер знает, что нужно запросить следующую страницу.

В этом случае в заголовке полученной страницы будет указан правильный URL-адрес, а не URL-адрес страницы, с которой исходный запрос был получен.

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

Пример: если вы сохраняете книгу и хотите отобразить страницу списка, если книга успешно сохранена. Если вы просто вызовете «controller.list ()» в своем методе, он покажет пользователю список отображаемых книг, но в строке URL все равно будет «... / book / save». Это не хорошо для закладок или перезагрузки. Вместо этого, вызов redirect / chain отправит браузеру ответ 302, который попросит его запросить страницу «... / book / list», что он и делает. Все ваши переменные (ваша модель и другие флеш-сообщения) находятся в области видимости флеш-памяти, поэтому они все еще доступны для использования вашей моделью / представлением, и в мире все устраивает.

Этот шаблон называется Post / Redirect / Get .

7 голосов
/ 31 августа 2009

'id' происходит из записей UrlMappings, таких как "/ $ controller / $ action? / $ Id?" - см. http://docs.grails.org/latest/guide/single.html#urlmappings для использования.

Параметры - это параметры строки запроса или параметры публикации формы, доступ к которым осуществляется в приложениях, отличных от Grails, с использованием «request.getParameter ('foo')», но упрощается в Grails как «params.foo». Содержимое карты модели хранится в Запросе как атрибуты, доступ к которым осуществляется в приложениях, отличных от Grails, с использованием «request.getAttribute ('foo')», но упрощается в Grails как «request.foo» или, как правило, осуществляется непосредственно в GSP, например, "$ {Foo}".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...