В приложении 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, который будет вызываться для определенного контроллера.
Точно так же, похоже, нет никакого способа получить доступ к экземпляру контроллера из фильтра. Конечно, я мог бы просто вставить все данные в модель, но мне интересно, есть ли более элегантный способ передачи данных между ними?
Спасибо,
Дон