Pal*_*alo 3 error-handling grails groovy
如果我正在进行常规请求,我可以在UrlMappings.groovy中定义错误和异常的处理,如下例所示:
"403"(controller: 'error', action: 'index', params:['code':'403'])
"404"(controller: 'error', action: 'index', params:['code':'404'])
"500"(controller: 'error', action: 'index', params:['code':'500'])
"500"(controller: 'home', action: 'noPrivileges', exception: IllegalOperationException)
Run Code Online (Sandbox Code Playgroud)
然后我可以处理特定控制器中的错误并呈现我选择的视图,例如
class ErrorController {
def index = {
render view: "/errors/myErrorPage", model: [code: params.code]
}
}
Run Code Online (Sandbox Code Playgroud)
这非常有效,每当服务器出现错误时,我都会收到错误页面.
现在我如何才能为ajax请求实现完全相同的行为?我使用grails remoteFunction或formRemote进行ajax请求.每次在服务器上发生异常时,我都希望在javascript中执行相同的代码(例如,我想显示带警报的警报('有异常')).
上述方法不适用于ajax请求.我仍然收到错误,即使错误中有myErrorPage.gsp的内容,它也不会打印到我使用formRemote或remoteFunction的update参数指定的html元素中.
我终于找到了一种完全干净的解决方案,与用于处理标准请求的方法兼容.
您需要修改处理错误的操作,如以下示例所示:
class ErrorController {
def index = {
if (request.xhr) {
response.status = 200
render template: "/errors/myAjaxErrorTemplate", model: [code: params.code]
} else {
render view: "/errors/myErrorPage", model: [code: params.code]
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用request.xhr,您可以区分ajax请求和标准请求.在ajax请求中,您还需要通过将响应状态设置为200来告诉grails响应正常.
非常干净整洁.:)我很惊讶这不能用Google搜索任何地方......
| 归档时间: |
|
| 查看次数: |
4004 次 |
| 最近记录: |