3

我正在尝试覆盖在播放框架 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

4 回答 4

3

好的,所以这种情况下的问题是资产的路线已更改为

GET     /*file                      controllers.Assets.at(path="/public", file)

将其更改回默认值

GET     /assets/*file               controllers.Assets.at(path="/public", file)

让它再次工作。我不完全明白为什么它停止工作,谁能解释一下?

于 2013-06-11T15:18:38.963 回答
2

您的代码有效且有效,但该行为应由浏览器引起。我通过使用您的代码并转到 Firefox 中不存在的页面对此进行了测试,并呈现并显示了错误页面。

当我尝试使用 Internet Explorer 进行相同操作时,它会中断(空白页面)。

解决方法比较简单,使用 anok代替notFound

@Override
public Result onHandlerNotFound(RequestHeader request) {
    return Results.ok(error.render());
}

a 也是如此badRequest,我没有测试过任何其他的。

于 2013-06-04T17:47:53.333 回答
1

我遇到了这个问题,我正在使用 play 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在此更改后清理您的项目 ( )。

于 2015-11-09T17:38:29.643 回答
0

如果您仍在寻找答案,我认为这应该会有所帮助。

@Override
public Promise<SimpleResult> onHandlerNotFound(RequestHeader request) {
    return Promise.<SimpleResult>pure(notFound(
            views.html.notFoundPage.render(request.uri())
    ));
}
于 2015-04-24T08:44:31.977 回答