Доступ к идентификатору перенаправления из фильтра "после" grails - PullRequest
1 голос
/ 17 февраля 2012

У меня есть стандартное закрытие контроллера Grails (1.3.7) в следующем порядке:

    def save = {

        // ... instantiate and save "instance" ...

        redirect(action: "show", id: instance.id)
    }

... и фильтр "после", например:

        def filters = 
{
    save(controller:'*', action:'save')
    {
        after =
        {
            // How do I get the newly created entity's ID here?     
        }
    }

Есть ли способ получить доступ к идентификатору нового объекта в фильтре для любого контроллера, не добавляя дополнительный / специальный код для каждого контроллера?

Ответы [ 2 ]

3 голосов
/ 17 февраля 2012

Вы можете поместить его в request, как

request.setAttribute('CREATED_ID', instance.id)

и получите в фильтре как

def id = request.getAttribute('CREATED_ID')

Обновление:

Или вы также помещаете его в запрос на beforeInsert событие или на свой собственный слушатель события: http://grails.org/doc/latest/guide/GORM.html#eventsAutoTimestamping

1 голос
/ 17 февраля 2012

Сохраните его в запросе в соответствии с рекомендациями splix или рассмотрите возможность использования перехватчиков.В afterInterceptor у вас есть прямой доступ к модели.см. Контроллеры-перехватчики

Обновлено На основании ваших комментариев вы можете использовать методы метапрограммирования и перехватывать каждый вызов afterInsert для классов домена.Например, если вы добавите это в Bootstrap:

grailsApplication.domainClasses.each { org.codehaus.groovy.grails.commons.GrailsDomainClass gc ->
    gc.metaClass.afterInsert = {
        println "$id"
    }
}

, вы сможете получить доступ ко всем вновь созданным объектам доменов и выполнять обычные операции.

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