0

我正在玩每个状态代码的错误页面,并且在渲染视图时遇到了麻烦。

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

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

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

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

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

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

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

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

4

2 回答 2

4

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

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

将产生相同的结果。

注意:-
您需要覆盖或删除此默认 grails 提供的条目UrlMapping.groovy
//"500"(view:'/error')

于 2013-06-14T20:07:46.177 回答
1

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

于 2013-06-17T16:43:36.537 回答