最近、Wicket を学び始め少し感動したのは、Wicketコンポーネント、モデルである。
PropertyModel のおかげで private フィールドをもつオブジェクトを
コンポーネントが取得して利用できること。
例えば、Foo クラスを ListView コンポーネントの populateItem(ListItem item) メソッド内で
Labal コンポーネントで表示させたい場合、Model インターフェース+コンポーネントの働きで、
以下のように書き、表示対象のFooクラスの要素は、getter を用意しない private 変数だけで良いことである。
add(new ListView<Foo>("fooListView",fooList){
@Override
populateItem(ListItem item){
Foo foo = item.getModelObject();
item.add(new Label("name",new PropertyModel<String>(foo,"name")));
}
}
);
Seasar は、Pageクラスで、表示したい要素は getter を作りたくなかったら、public 宣言で変数を用意をしなければならなかった。
Wicket は、上記のようにPropertyModelを使う場合、private 宣言のままで、getterを用意しなくても良いのが凄い!