我正在尝试覆盖播放框架2.1.1中处理错误的默认行为,但我遇到404问题,基本上我的重写onHandlerNotFound似乎没有被调用。当我访问不存在的页面时,只返回一个空白页面。有谁知道我做错了什么?我的Global.java低于
import play.GlobalSettings;
import play.mvc.Http.RequestHeader;
import play.mvc.Result;
import play.mvc.Results;
import views.html.error;
public class Global extends GlobalSettings {
@Override
public Result onHandlerNotFound(RequestHeader request) {
return Results.notFound(error.render());
}
@Override
public Result onError(RequestHeader request, Throwable t) {
return Results.internalServerError(error.render());
}
}
顺便说一句,onError覆盖正在运行。 感谢
答案 0 :(得分:3)
好的,所以这种情况下的问题是资产的路线已经改为
GET /*file controllers.Assets.at(path="/public", file)
将其更改回默认值
GET /assets/*file controllers.Assets.at(path="/public", file)
让它再次运作。我不完全理解为什么它停止工作,有人可以解释一下吗?
答案 1 :(得分:2)
您的代码有效且有效,但行为应由浏览器引起。我通过使用您的代码测试了这一点并转到Firefox中的一个不存在的页面,并呈现并显示错误页面。
当我尝试使用Internet Explorer时,它会中断(空白页面)。
解决方案相对简单,使用ok
代替notFound
:
@Override
public Result onHandlerNotFound(RequestHeader request) {
return Results.ok(error.render());
}
同样适用于badRequest
,我没有测试任何其他人。
答案 2 :(得分:1)
我遇到了这个问题并且我正在使用游戏2.3.4,我的解决方案是明确说Results.notFound(...)
而不仅仅是notFound(...)
这是我的功能
@Override
public F.Promise<Result> onHandlerNotFound(Http.RequestHeader request) {
return F.Promise.<Result>pure(Results.notFound(views.html.notfoundPage.render(request.uri())));
}
在此更改后,请勿忘记清理项目(play clean, or activator clean
)。
答案 3 :(得分:0)
如果您仍在寻找答案,我认为这应该会有所帮助。
@Override
public Promise<SimpleResult> onHandlerNotFound(RequestHeader request) {
return Promise.<SimpleResult>pure(notFound(
views.html.notFoundPage.render(request.uri())
));
}