takayuki hayashi
tkbyt****@gmail*****
2008年 7月 24日 (木) 20:41:44 JST
林です。 Wicketのバージョンは1.3.xということと、 独自のInternalErroPageをFooErrorPageとした場合で話を進めさせていただきます。 まず、org.apache.wicket.protocol.http.WebRequestCycleクラスを継承したクラスを作成し、onRuntimeExceptionメソッドをオーバーライドします。 こんな感じです。 -------------- public class FooRequestCycle extends WebRequestCycle{ public TestRequestCycle(WebApplication application, WebRequest request, Response response) { super(application, request, response); } @Override public Page onRuntimeException(Page page, RuntimeException e) { //第一引数のpageはExceptionが発生したページクラスのインスタンスです。 //Exception発生時の状態が保持されているので、必要であればダウンキャストして //フィールドの値を取得したりできます。 //エラーページのコンストラクタにExceptionを渡す。 return new FooErrorPage(e); } } ---------- 次にWebApplicationを継承したクラス内にてnewRequestCycleメソッドをオーバーライドします。 そしてそのメソッド内で上記で作成したFooRequestCycleを返します。 こんなかんじです。 ----------- public class FooApplication extends WebApplication{ @Override public Class getHomePage() { return FooPage.class; } @Override public RequestCycle newRequestCycle(Request request, Response response) { return new FooRequestCycle(this,(WebRequest)request, (WebResponse)response); } } ---------- これで一応Errorページへエラー情報を渡すことは可能です。 ただ、FooRequestCycle#onRuntimeExceptionで渡されるExceptionはInvocationTargetException とWicketRuntimeExceptionにラップされているので、instanceof等で実際に発生したExceptionを比較するにはe.getCause().getCause()としないといけないのですが。。(あくまで我流なので、どなたかもっとスマートなやり方を知っている方はいませんか?) 2008/07/24 12:26 Hiromichi Kishi <h.kis****@gmail*****>: > 岸@Kishiです。 > > 以前、InternalErrorPageの変更の方法を質問しましたところ、 > WebApplicationで > > setApplicationSettings().setInternalErrorPage(エラークラス.class); > > とやれば変更することがわかりました。(その節はありがとうございました。) > > 今回の質問は、このInternalErrorPageが出る前に見ていたページや発生した例外のメッセージを受け取る方法についてです。 > InternalErrorPageでエラーについてまとめてログを取りたいと思っているのですが、方法がわかる方がいましたらご教示ください。 > > よろしくお願いします。 > > _______________________________________________ > Wicket-ja-user mailing list > Wicke****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user >