Я обновляю веб-приложение Grails 2.5.1 до grails 3, но я застрял в этой проблеме: в моих контроллерах я использовал beforeInterceptor
s для предварительного расчета набора переменных, которые будут использоваться в их методах действий.Grails 3 - назначить переменную контроллера в перехватчике
class MyController {
def myVar
def beforeInterceptor = {
myVar = calculateMyVarFromParams(params)
}
def index() {
/* myVar is already initialized */
}
}
Теперь, когда перехватчики Grails 3 более мощные и на отдельных файлах, как я могу достичь того же результата? Для того, чтобы избежать использования запроса области видимости переменных, я попытался с помощью следующего кода
class MyInterceptor {
boolean before() {
MyController.myVar = calculateMyVarFromParams(params)
MyController.myVar != null // also block execution if myVar is still null
}
boolean after() { true }
void afterView() { /* nothing */ }
}
class MyController {
def myVar
def index() {
println('myVar: '+myVar)
}
}
, но я получаю
ERROR org.grails.web.errors.GrailsExceptionResolver - MissingPropertyException occurred when processing request: [GET] /my/index
No such property: myVar for class: com.usablenet.utest.MyController
Possible solutions: myVar. Stacktrace follows:
groovy.lang.MissingPropertyException: No such property: myVar for class: com.usablenet.utest.MyController
Possible solutions: myVar
at com.usablenet.utest.MyInterceptor.before(MyInterceptor.groovy:15) ~[main/:na]
Я предположил (ошибочно, по-видимому), что это было бы возможно. Есть ли решение? Заранее спасибо!
Примечание: в моем случае MyController является абстрактным классом продлен всеми другими контроллерами