Locked History Actions

wicket/ErrorHandling

エラーハンドリング

ページレンダリング時にエラーが発生すると、デフォルトではそのスタックトレースの内容からなるエラーページを表示してしまう。 これを以下のように変更したい、

  • 発生したエラーをログに出力する。
  • スタックトレースではなく、「エラーが起こりました。すみません」のようなメッセージのみとする。

また、この機能を使って「わざと」エラーを起こすようにしたい。例えば、ブックマーク可能ページで特定のパラメータが必要であるにも関わらず指定されていない場合やパラメータ指定が間違っている場合には、呼び出されたページ側でレンダリングを行うことなく、不法を示す例外を投げればそれを適切に処理することができる。まずこれを定義する。

public class CantRenderPageException extends RuntimeException {
  public CantRenderPageException(String message) {
    super(message);
  }
}

Application側では以下のようにする。

  /** リクエストサイクル */
  @Override
  public RequestCycle newRequestCycle(final Request request, final Response response) {
    RequestCycle c = new WebRequestCycle(this, (WebRequest)request, (WebResponse)response) {
      public Page onRuntimeException(Page page, RuntimeException ex) {
        // 元々の原因を取得する
        Throwable th = ex;
        while (th.getCause() != null) th = th.getCause();

        // ここでエラーを記録する。
        .....

        // エラーページを表示
        return new ErrorPage(th);
      }
    };
    return c;
  }

ErrorPageではCantRenderPageExceptionかそうでないかで処理をわければよい。