【问题标题】:Grails render won't render viewGrails渲染不会渲染视图
【发布时间】:2013-06-14 19:52:26
【问题描述】:

我正在处理每个状态代码的错误页面,并且在呈现视图时遇到了麻烦。

我为此使用正常的 URLMappings 策略,并使用错误控制器进行额外处理并呈现视图(我从 500 开始,但会添加更多):

"500"(controller: 'error', action: 'internalServerError')

在我的控制器中,我只是渲染与错误相关的视图:

def internalServerError() {
    render view: '/error/internalServerError'
}

视图没有什么特别的,只是包含一个简单的消息等。当我在代码中植入导致异常的内容时,确实会调用上面的控制器操作,但由于某种原因,渲染不会导致视图渲染。它基本上只是吃掉异常,从用户的角度来看,它似乎什么也没发生。

我一直在修改不同的渲染选项和返回,但总是会发生同样的事情。另外值得注意的是,将 URLMappings 更改为:

"500"(view:'/error/internalServerError')

导致同样的事情发生。我在这里遗漏了什么吗?

【问题讨论】:

    标签: grails


    【解决方案1】:

    直接渲染视图,而不是在动作中提供相对路径:-

    def internalServerError() {
        render view: 'internalServerError'
    }
    

    grails-app/views/error/internalServerError.gsp 就位。

    更新
    以下是它的工作原理:

    //UrlMapping:
    "500"(controller: 'errors', action: 'internalServerError')
    
    //ErrorsController:
    class ErrorsController {
        def index() { 
            response.sendError(500)
        }
    
        def internalServerError(){
            render view: 'internalServerError'
        }
    }
    
    //grails-app/views/errors/internalServerError.gsp
    This is my customized Internal Server Error.
    

    尝试点击控制器的index 操作。
    http://localhost:8080/yourApp/errors

    您应该会看到自定义的错误页面。

    如果您尝试处理异常,这同样适用,例如
    "500"(controller: 'errors', action: 'internalServerError', exception: Exception)

    def index(){
        throw new Exception()
    }
    

    将产生相同的结果。

    注意:-
    您需要从 UrlMapping.groovy
    //"500"(view:'/error')

    覆盖或删除此默认 grails 提供的条目

    【讨论】:

    • 在这种情况下,您可以发布您的实际controllergsp 吗?正如您已经提到的,您可以在 Exception 上执行操作(确保存在 500 HTTP 响应代码),我不应该为接线而烦恼。
    • 您更新的代码与我尝试的基本相同。我没有尝试过 UrlMappings 中的异常参数,但这也产生了相同的结果。在所有情况下,“500”映射指向的控制器操作总是被命中,只是由于某种原因渲染似乎不起作用..不过感谢您的回复。
    • @JacobASeverson 它对我有用,可以快速渲染所需的页面(Grails 2.2.2)。您是否删除了我的注释中提到的默认映射?
    • 我做到了。我今天发现的另一件事要注意..当控制器或服务中发生异常时,我会看到这种奇怪的行为。如果问题发生在 gsp 中(如果我引用未定义的变量或执行其他引发异常的操作),它实际上会按预期呈现我的错误页面。
    • 部分解决,请参阅我刚刚添加的答案。 +1 用于 URLMappings 讨论。不幸的是,这只是应用程序中的一个错误,代码映射总是正确的。
    【解决方案2】:

    看起来它与 Grails 呈现或 URL 映射无关。它发生在应用程序的某些部分而不是其他部分,因此存在错误。为 URLMappings 讨论保持活力。

    【讨论】:

      猜你喜欢
      • 2017-09-17
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      • 2017-06-05
      相关资源
      最近更新 更多