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