背景
画面初期表示時にエラーチェックなどを行って、
メッセージを表示するコンポーネントで表示しようとしても、
例外が発生して落ちてしまう。
こんなときどうする?というお話。
方法
onLoadのビヘイビアを使えば解決するかもしれない。
testForm = new Form<Void>("TestForm") {
@Override
protected void onInitialize() {
try{
super.onInitialize();
}catch(Exception e){
System.out.println("Error: " + e.getMessage());
}
}
add(testForm);
// ↓ここの部分
add(new AjaxEventBehavior("onload") {
@Override
protected void onEvent(AjaxRequestTarget target) {
try {
// 何かしらの処理
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
});
}
簡単な説明
onInitializeなどの画面初期表示時に動作してくれる処理たちは、
あらかじめ指定された画面を表示することに一生懸命になってしまっている。
画面の初期表示が終わってボールがクライアント側に戻ると
ようやく変更要求(AjaxRequestTarget)を受け付けてくれる。
AjaxEventBehavior("onload")をaddしてあげることで、
javascriptのonloadと同じタイミングで自動で動いてくれる。
onInitializeの動き
サーバ側で画面を描画しクライアント側へ返す
このとき、変更要求(AjaxRequestTarget)は機能しない。
onLoad(AjaxEventBehavior)の動き
サーバ側で生成された画面一式を受けったら動く
このとき、変更要求(AjaxRequestTarget)は機能する。
画面初期表示時の他のライフタイムサイクル
onInitialize()
コンポーネントやページが初期化される際に呼び出される。
onBeforeRender()
コンポーネントやページがレンダリングされる前に呼び出される。
onAfterRender()
コンポーネントやページが完全にレンダリングされた後に呼び出される。
onConfigure()
コンポーネントが構成される際に呼び出される。
onDetach()
コンポーネントがdetachされる際に呼び出される。