是否可以在 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') 
       } 
 
    } 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!