Предыдущие ответы неполные. Итак, я собираю их вместе со своими данными и проясняю их.
У вас есть два варианта:
Цепочка действий:
def action1() = {
DomainClass domainInstance = DomainClass.findById(params.id);
chain (action: 'action2', model: [domainInstance: domainInstance]);
}
def action2() = {
DomainClass domainInstance = chainModel?.domainInstance ?: DomainClass.findById(params.id);
[domainInstance: domainInstance];
}
Однако, похоже, что последующее действие использует новый сеанс базы данных
вместо того, чтобы повторно использовать тот из предшественника (который также может быть
настраивается в Grails, хотя я не знаю как). Так что лениво
загруженный объект не может быть полностью загружен в последующем действии и
может дать LazyInitializationException (в зависимости от вашей конфигурации ORM, конечно).
Пересылка запроса:
def action1() = {
DomainClass domainInstance = DomainClass.findById(params.id);
forward (action: 'action2', model: [domainInstance: domainInstance]);
}
def action2() = {
DomainClass domainInstance = request?.domainInstance ?: DomainClass.findById(params.id);
[domainInstance: domainInstance];
}
В отличие от предыдущего случая, пересылка запросов повторно использует существующий сеанс, поэтому проблем с отложенной загрузкой не возникнет.
Как видите, синтаксис для обоих практически идентичен. Но следует предпочесть пересылку запросов в соответствии с рассматриваемым требованием из-за проблемы, упомянутой выше. Еще одна важная деталь касается URL, который просматривается в адресной строке во время загрузки страницы. Переадресация запросов сохранит URL-адрес страницы, а цепочка действий ИЗМЕНИТ URL-адрес страницы к последнему действию.