gpt4 book ai didi

grails - 在Grails中多次重定向响应

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

是否可以在 Controller 之间多次重定向响应?如果我尝试重定向 Controller 内部的响应,然后在Filter的after方法中进行了重定向,则会收到此异常:

ERROR errors.GrailsExceptionResolver  - CannotRedirectException occurred when processing request: [GET] /ac/customer/index
Cannot issue a redirect(..) here. A previous call to redirect(..) has already redirected the response.. Stacktrace follows:
Message: Cannot issue a redirect(..) here. A previous call to redirect(..) has already redirected the response.

有其他解决方法吗?

最佳答案

在 Controller 之间多次重定向响应没有问题,但是您只能在一个 Action 中重定向一次。检查您的操作方法,并验证您始终在调用重定向后退出该方法(重定向并不意味着返回)。

这是错误的:

class MyController{

def myAction = {
if(params.myparam){ redirect(uri:'/') }
redirect(uri:'/foo')
}

}

在此示例中,如果存在“myparam”,则在操作内两次发出重定向,这很不好。

这是对的

MyController类{
def myAction = {
if(params.myparam){
return redirect(uri:'/')
}
redirect(uri:'/foo')
}

}

注意使用闭包并返回内部闭包。闭包内部的返回不是从主要 Action 中退出,而是从闭包itef中退出

这是错的
class MyController{

def myAction = {
withForm {
return redirect(uri:'/')
}.invalidToken {
// bad request
}
redirect(uri:'/foo')
}

}

因为使用有效的两个重定向被调用。

这是对的:

MyController类{
    def myAction = {
def formIsValid
withForm {
formIsValid = true
}.invalidToken {
formIsValid = false
}

if(formIsValid){
return redirect(uri:'/')
}

redirect(uri:'/foo')
}

}

关于grails - 在Grails中多次重定向响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13739450/

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