publicでないアクセス

最近、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を用意しなくても良いのが凄い!