Wicket 1.4.10 リリース

先週 Wicket 1.4.10 がリリースされましたね。新たに Component クラスに onInitialize() メソッドと onConfigure() メソッドが追加されました。

onInitialize() は、これまでコンストラクタで行っていたような初期化処理を行うためにオーバーライドして使います。

なぜコンストラクタで行ってはいけないかというと、コンストラクタで行うとコンポーネントの相互参照ができないなど「インスタンス化の順序」が問題になることがあるからです。

onInitialize() は、Page オブジェクトに直接または親コンポーネントを経るなりして add された場合、ライフサイクルの最初に実行されます。

私は、Swing のようにイベントリスナを準備して継承を用いずにコンポーネントの機能を拡張できるようにコンポーネントをカスタマイズして使うことが多いのですが、これまでは初期化処理がイベント駆動にできずに多少不便を感じていました。これで初期化処理もイベント駆動にできるのでこの機能は歓迎しています。

onConfigure() は、onBeforeRender() を補完するものとなるでしょう。onBeforeRender() はデフォルトではレンダリングされないことが明らかな場合は実行されません。たとえば、setVisible(boolean) で false が渡された場合などです。

それに対して onConfigure() は、そのコンポーネントが属するページにリクエストがあれば必ず実行されます。そのため、例えば「リクエストされた時刻が17:00を過ぎていた場合のみ表示」といった処理が割りと簡単に書けます。