Grails-先前对重定向(..)的调用已经重定向

Grails-先前对重定向(..)的调用已经重定向,grails,Grails,在Grails应用程序中,偶尔会在日志中看到“无法发出重定向”: 2011-04-27 12:18:40469[TP-Processor13]错误GrailExceptionResolver-无法在此处发出重定向(..)。先前对重定向(..)的调用已重定向响应。 org.codehaus.groovy.grails.web.servlet.mvc.exceptions.CannotRedirectException:无法在此处发出重定向(..)。先前对重定向(..)的调用已重定向响应。 在com

在Grails应用程序中,偶尔会在日志中看到“无法发出重定向”:

2011-04-27 12:18:40469[TP-Processor13]错误GrailExceptionResolver-无法在此处发出重定向(..)。先前对重定向(..)的调用已重定向响应。 org.codehaus.groovy.grails.web.servlet.mvc.exceptions.CannotRedirectException:无法在此处发出重定向(..)。先前对重定向(..)的调用已重定向响应。 在com.coach.LoginController$\u closure2.doCall上(LoginController.groovy:90)

我不知道怎么找到这个。有什么想法或建议吗


Todd检查登录控制器;在重定向之后,您似乎没有从操作返回。例如:


您只能重定向一次。如果您从控制器方法A->B->C移动,那么B实际上应该是一个服务方法,然后将其结果传递给控制器方法C,而不是控制器方法

class TemplateController {
  def templateService

  def A() {
    def results = templateService.B(params.input)

    redirect action: 'C', params: ['results': results]
  }

  def C() {
    return params.results
  }
}

虽然这个问题已经得到了回答,但我想我会为未来的拖网渔船分享我的经验。希望能有帮助

这发生在我身上,因为我没有在重定向后执行
返回操作

    if (test) {
        flash.message = "Error message."
        redirect(action: "list")
    }

    switch ( params.test ) {
        case "value": 
            redirect(action: "value", id: callInstance.id, version: callInstance.version)
重定向后,如果没有
返回,Grails将继续运行。在我的例子中,它点击了
开关
,然后转到第二个重定向,这就是产生错误的地方。代码应如下所示:

    if (test) {
        flash.message = "Error message."
        redirect(action: "list")
        return
    }

    switch ( params.test ) {
        case "value": 
            redirect(action: "value", id: callInstance.id, version: callInstance.version)
            return
这段代码当然已经匿名;)

编辑


哦,天哪。我刚刚意识到这是的答案:/好吧,我把它作为一个额外的例子。

这里是什么:LoginController。groovy:90??
    if (test) {
        flash.message = "Error message."
        redirect(action: "list")
        return
    }

    switch ( params.test ) {
        case "value": 
            redirect(action: "value", id: callInstance.id, version: callInstance.version)
            return