在Grails中多次重定向响应

在Grails中多次重定向响应,grails,redirect,filter,Grails,Redirect,Filter,是否可以在控制器之间多次重定向响应?如果我尝试在控制器内重定向响应,然后在过滤器的after方法中重定向,则会出现以下异常: ERROR errors.GrailsExceptionResolver - CannotRedirectException occurred when processing request: [GET] /ac/customer/index Cannot issue a redirect(..) here. A previous call to redirect(..

是否可以在控制器之间多次重定向响应?如果我尝试在控制器内重定向响应,然后在过滤器的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.

是否有其他方法解决此问题?

您可以使用“转发”:目的:将请求从一个控制器转发到下一个控制器,而无需发出HTTP重定向。请在中查看。

您可以使用
转发
:目的:将请求从一个控制器转发到下一个控制器,而无需发出HTTP重定向。请在中查看。

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

这是错误的:

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')
   }

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

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

       redirect(uri:'/foo')
       }

    }
注意使用闭包和闭包内部的返回。闭包内部的返回不是从主操作退出,而是从闭包itsef退出

这是错误的

class MyController{

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

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

这是正确的:

类MyController{

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

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

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

       redirect(uri:'/foo')
       }

    }

在控制器之间多次重定向响应没有问题,但在操作内只能重定向一次。请检查操作方法,并验证调用重定向后始终退出该方法(重定向并不意味着返回)

这是错误的:

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')
   }

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

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

       redirect(uri:'/foo')
       }

    }
注意使用闭包和闭包内部的返回。闭包内部的返回不是从主操作退出,而是从闭包itsef退出

这是错误的

class MyController{

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

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

这是正确的:

类MyController{

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

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

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

       redirect(uri:'/foo')
       }

    }

我有这个问题。使用

   chain(action:'', model:[pass any params here including any message]

以下是链的文档:

我遇到了这个问题。请使用

   chain(action:'', model:[pass any params here including any message]
以下是链的文档: