Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

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かそうでないかで処理をわければよい。