3

Play フレームワーク 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 に答える
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 に答える