У меня есть контроллер, который наследует от класса с beforeInterceptor
.
Вот мой базовый класс.
class FooBase {
def beforeInterceptor = [action: {parentInterceptor()}]
def parentInterceptor() {
render("Snarge")
}
}
Вот версия контроллера, которая не работает.
class BrokenController extends FooBase
{
def beforeInterceptor = [action: {childInterceptor()}]
def childInterceptor() {
super.beforeInterceptor.action.call()
render("Bar")
}
def index = {
render("Foo")
}
}
Вот версия, которая работает
class WorkingController extends FooBase
{
def beforeInterceptor = {
super.beforeInterceptor.action.call()
render("Bar")
}
def index = {
render("Foo")
}
}
Когда я вызываю index для WorkingController
, я получаю вывод SnargeBarFoo
.Когда я вызываю index на BrokenController
, я получаю IllegalAccessError
Я полагаю, у меня есть версия, которая работает, поэтому мой вопрос больше о том, что здесь происходит?Почему одна версия может обращаться к родительскому классу из дочернего класса, а другая - нет?
Я искал вариант использования, который позволяет использовать функции-перехватчики с функциональностью except
.Это требует способности цепочки перехватчиков, когда они реализованы с использованием карты.