我正在使用play 2.2.0 我有一个全局对象设置定义方法onError和onHandlerNotFound重写。从视图我发出ajax调用,由于sql语法问题抛出500内部服务器,但我无法看到我在onError方法中设置的500内部页面,但如果找不到处理程序,我可以看到NotFound页面。这是预期的,因为我正在使用ajax请求。
object Global extends WithFilters(LogFilter) with GlobalSettings {
override def onError(request: RequestHeader, ex: Throwable) = {
Future.successful(InternalServerError(
views.html.error(ex)
))
}
...
}
答案 0 :(得分:0)
我想这是预期的,因为你的两个ajax请求很可能是不同的(正如Ashalynd提到的,发布你的前端代码)。你在哪里做ajax请求捕获响应并相应地重定向。例如。用jQuery:
$.ajax({
url: "http://wherever.com",
type: 'GET',
success: function(msg) {
// Do successful things
},
error: function (xhr, ajaxOptions, thrownError) {
// Redirect
window.location.href = "/errorpage.html";
// Or some weird form of "redirect" (don't use this, just
// for demonstration purpose, showing how you can capture
// whatever you sent along with your error)
var responseText = $.httpData(xhr);
document.body.innerHtml = responseText;
}
});
答案 1 :(得分:0)
这是Play的一个特色! 2.2。我和Play有同样的问题! 2.2.1,Java API并从命令行使用curl。只是onHandlerNotFound按照指定的方式工作,但onError只是让HTTP连接挂起而永远不会返回响应。
降级到2.1.5解决了这个问题。