エラーハンドリング
ページレンダリング時にエラーが発生すると、デフォルトではそのスタックトレースの内容からなるエラーページを表示してしまう。 これを以下のように変更したい、
- 発生したエラーをログに出力する。
- スタックトレースではなく、「エラーが起こりました。すみません」のようなメッセージのみとする。
また、この機能を使って「わざと」エラーを起こすようにしたい。例えば、ブックマーク可能ページで特定のパラメータが必要であるにも関わらず指定されていない場合やパラメータ指定が間違っている場合には、呼び出されたページ側でレンダリングを行うことなく、不法を示す例外を投げればそれを適切に処理することができる。まずこれを定義する。
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かそうでないかで処理をわければよい。