gpt4 book ai didi

grails - Grails 3-在拦截器中分配 Controller 的变量

转载 作者:行者123 更新时间:2023-12-02 14:40:53 24 4
gpt4 key购买 nike

我正在通过Grails 2.5.1 web-app升级到grails 3,但是我遇到了这个问题:在 Controller 中,我使用beforeInterceptor预先计算了要在其操作方法中使用的一组变量。

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是由所有其他 Controller 扩展的抽象类

最佳答案

我所缺少的是将myVar声明为static,就这么简单!

更新
如果由于某种原因无法将变量定义为static,则可以将其设置为拦截器中request对象的属性,然后在 Controller 中从那里读取它

// Interceptor
request.setAttribute('myVar', calculateMyVarFromParams(params))

// Controller
request.getAttribute('myVar')

关于grails - Grails 3-在拦截器中分配 Controller 的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35558666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com