私はドキュメントが言うだけのようPlayFrameworkでカスタムページを実装しました:コールを手動でPlayFrameworkのカスタムエラーページ
public class ErrorHandler extends DefaultHttpErrorHandler {
@Inject
public ErrorHandler(Configuration configuration, Environment environment, OptionalSourceMapper sourceMapper, Provider<Router> routes) {
super(configuration, environment, sourceMapper, routes);
}
@Override
public F.Promise<Result> onClientError(Http.RequestHeader requestHeader, int errorCode, String message) {
Logger.debug("Error: onClientError : " + errorCode + ", message: " + message);
return super.onClientError(requestHeader, errorCode, message);
}
@Override
public F.Promise<Result> onServerError(Http.RequestHeader request, Throwable exception) {
Logger.debug("Error: onServerError general");
return F.Promise.pure(redirect(com.company.routes.ErrorController.serverErrorPage()));
}
@Override
protected F.Promise<Result> onBadRequest(Http.RequestHeader request, String message) {
Logger.debug("Error: onBadRequest, message: " + message);
return F.Promise.pure(redirect(com.company.routes.ErrorController.badRequestPage()));
}
@Override
protected F.Promise<Result> onForbidden(Http.RequestHeader request, String message) {
Logger.debug("Error: onForbidden, message: " + message);
return F.Promise.pure(redirect(com.company.routes.ErrorController.forbiddenPage()));
}
@Override
protected F.Promise<Result> onNotFound(Http.RequestHeader request, String message) {
Logger.debug("Error: onNotFound, message: " + message);
return F.Promise.pure(redirect(com.company.routes.ErrorController.notFoundPage()));
}
@Override
protected F.Promise<Result> onOtherClientError(Http.RequestHeader request, int statusCode, String message) {
Logger.debug("Error: onOtherClientError, message: " + message);
return F.Promise.pure(redirect(com.company.routes.ErrorController.errorDefaultPage()));
}
}
カスタムページは、エラーがフレームワーク自体によってスローされた場合に効果的です。
コントローラからのエラーページにリダイレクトする際に問題があります。私がエンドポイントを呼び出すとき:
public Result contact() {
return Results.forbidden("Forbidden");
}
ErrorHanderのエラーページは表示されません。私は "禁止された"テキストしか見ることができません。
私のカスタムエラーページを明示的にリダイレクトせずに表示するにはどうすればよいですか?
:その後、私は同じようにそれを呼び出すことができます
:私は解決策を(フレームワーク2.5を再生する)以下になってしまいました。しかし、DefaultHttpErrorHandlerの基礎となる実装を確認すると、onClientErrorの呼び出しを既に他のメソッドにリダイレクトしていることに気づくでしょう。 onBadRequest、onForbidden。 私の問題は、結果を返すにもかかわらずです。禁じられた()。要求はカスタムErrorHandlerによって捕捉されていません。 –
あなたは正しいようです。おそらくそれはPlay 2.5で動作するかもしれません - 彼らは2.4と比較してDefaultHttpErrorHandlerで多くを変えました。 – Kris