覆盖onHandlerNotFound未在Global.java中调用

时间:2013-06-04 14:13:04

标签: playframework playframework-2.0

我正在尝试覆盖播放框架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覆盖正在运行。 感谢

4 个答案:

答案 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())
    ));
}
相关问题