передать данные от контроллера к фильтру - PullRequest
2 голосов
/ 26 июня 2009

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

class MyController {
    def myAction = {
        render(view:"myView", model:[key: "value"])

        passData {
            // Do some processing here
            name = "paolo"
            age = 38
        }
    }
}

public class MyFilters {

    def name
    def age

    def filters = {
        myFilter(controller: "*", action: "*") {
            after = { model ->
                // Do something with name and age
                return true
            }
        }
    }
}

Первоначально планировалось сделать следующее при init () закрытии BootStrap.config:

  • Использование метапрограммирования для добавления метода «passData (Closure pdClosure)» ко всем контроллерам
  • Установите для делегата pdClosure значение MyFilters, чтобы при задании свойств name и age в этом замыкании они устанавливались в экземпляре MyFilters.

Однако я понял, что это не сработает, поскольку у меня нет очевидного способа получить доступ (из BootStrap.init) к экземпляру MyFilters, который будет вызываться для определенного контроллера.

Точно так же, похоже, нет никакого способа получить доступ к экземпляру контроллера из фильтра. Конечно, я мог бы просто вставить все данные в модель, но мне интересно, есть ли более элегантный способ передачи данных между ними?

Спасибо, Дон

Ответы [ 2 ]

3 голосов
/ 26 июня 2009

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

0 голосов
/ 17 июля 2009

Если в вашем фильтре вы хотите изменить данные, которые являются моделью, то ваше решение выглядит хорошо.

Если, однако, вы просто хотите передать некоторые параметры от контроллера к фильтру, атрибуты запроса должны быть лучше (если вам нужны эти данные только для области запроса). Таким образом, вы не смешиваете модель с некоторыми параметрами запроса.

...