grails - 呈现与 Action 同名的 View 时,Grails重定向循环错误

标签 grails groovy infinite-loop http-redirect

我正在使用Grails 2.2.3应用程序清除数据库中的重复人员。当我尝试访问 Controller 操作时,出现以下错误:
Error Caused by: org.codehaus.groovy.grails.web.servlet.mvc.exceptions.CannotRedirectException: Cannot issue a redirect(..) here. A previous call to redirect(..) has already redirected the response.
这看起来像是一个无限重定向循环,因为一旦我转到duplicate()操作,控制台中的Stacktrace就变得更加笨拙了。它一直打印,直到我从控制台退出Ctrl+C为止。另外,有多个屏幕可用于处理和修复重复项,这就是为什么我提供了一种存储“工作”重复项的方法的原因。

Controller Action :

  • setWorkingDuplicate -设置要在每个页面上使用的重复项(因此用户不必一直输入它)。
  • duplicate -查看重复项,或者,如果不存在session.id,,则用户以
  • 形式查找重复项
  • getDuplicate (仅操作)-获取重复并呈现重复页面

  • 当我直接转到plicate()页面时发生错误。如果我首先设置工作副本,则不会发生重定向问题。

    这是引起问题的 Controller 操作。
    def setWorkingDuplicate(Integer id) {
        if (id && Duplicate.get(id)) {
            session.id = id
            flash.message = "Working Duplicate set to ID ${id}"
            redirect action: 'getDuplicate', params: [id: session.id]
        }
    }
    
    def duplicate() {
        if (session.id) {
            redirect(action: 'getDuplicate', params: [id: session.id])
            return
        }
        render view: 'duplicate'
    }
    
    def getDuplicate(Integer id) {
        def duplicate = Duplicate.get(id)
    
        if (!duplicate) {
            flash.message = "Duplicate not found with ID ${id}."
            render(view: 'duplicate')
            return
        }
    
        render view: 'duplicate', model: [duplicate: duplicate]
    }
    

    有谁知道这可能是什么原因?

    编辑:它看起来像在堆栈跟踪中的某个地方,我也收到以下错误。
    Error Caused by: java.lang.StackOverflowError
    


    WARN: Exception: java.lang.reflect.InvocationTargetException
    

    在堆栈跟踪中,以下错误不断重复出现:
    | Error     at edu.mssu.duplicates.InitialStepsController.render(InitialStepsController.groovy)
    | Error     at edu.mssu.duplicates.InitialStepsController$render.callCurrent(Unknown Source)
    | Error     at edu.mssu.duplicates.InitialStepsController.getDuplicate(InitialStepsController.groovy:69)
    | Error     at edu.mssu.duplicates.InitialStepsController.getDuplicate(InitialStepsController.groovy)
    | Error     at sun.reflect.GeneratedMethodAccessor382.invoke(Unknown Source)
    | Error     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    | Error     at java.lang.reflect.Method.invoke(Method.java:601)
    | Error     at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1259)
    | Error     at org.apache.commons.beanutils.BeanMap.get(BeanMap.java:390)
    | Error     at org.apache.commons.beanutils.BeanMap$12.next(BeanMap.java:565)
    | Error     at org.apache.commons.collections.iterators.UnmodifiableIterator.next(UnmodifiableIterator.java:72)
    | Error     at java.util.HashMap.putAll(HashMap.java:621)
    | Error     at org.springframework.ui.ModelMap.addAllAttributes(ModelMap.java:117)
    | Error     at org.springframework.web.servlet.ModelAndView.<init>(ModelAndView.java:97)
    | Error     at org.codehaus.groovy.grails.web.metaclass.RenderDynamicMethod.renderView(RenderDynamicMethod.java:485)
    | Error     at org.codehaus.groovy.grails.web.metaclass.RenderDynamicMethod.invoke(RenderDynamicMethod.java:187)
    | Error     at org.codehaus.groovy.grails.plugins.web.api.ControllersApi.invokeRender(ControllersApi.java:258)
    | Error     at org.codehaus.groovy.grails.plugins.web.api.ControllersApi.render(ControllersApi.java:246)
    

    这是我的重复GSP版本(非常精简)。 GSP提供了一种快速搜索/显示/更新重复项并在一个页面中显示重复项的方法。因此,搜索框和显示表单。
    <%@ page contentType="text/html;charset=UTF-8" %>
    <html>
    <head>
    </head>
    <body>
        <h1>Duplicate</h1>
            <g:form action="duplicate" method="POST">
                <label for="id">Duplicate ID</label> <g:textField name="id" value="${duplicate?.id}" />
    
                <g:submitButton name="btnRetrieveDuplicate" value="Retrieve Duplicate" />
            </g:form>
    
            <g:if test="${duplicate}">
                <g:form action="updateDuplicate" method="POST">
                    //Form stuff
    
                    <g:hiddenField name="id" value="${duplicate?.id}" />
                </g:form>
            </g:if>
    </body>
    </html>
    

    最佳答案

    在命名 Controller 与其他对象匹配或以“get”开头时,我遇到了一些非常奇怪的问题

    尝试重命名:
    def getDuplicate(Integer id)变成完全不同的东西:def myDupe(Integer id)
    抱歉,我无法为您提供更好的解释,但是为了使事情正常进行,我已经做了几次。

    关于grails - 呈现与 Action 同名的 View 时,Grails重定向循环错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18882665/

    相关文章:

    Jenkins 将阶段计算的值传递给 shell 脚本

    grails - Grails中的Set属性方法无法全局更改实例

    java - grails - 域类中的继承 - 将列继承到基表中

    grails - Groovy控制台无法 “remember”任何变量-总是说 “unknown property”

    python - 无意的无限循环

    Java InputStreamReader 不变的停顿

    java - (Java) 退出循环 "remotely"

    grails - Jasper Report插件在Grails 2.4.2中生成PDF

    Grails 属于任一类

    json - 尝试将域类序列化为JSON时发生Grails堆栈溢出错误