POJOのプロパティをコンポーネントに表示する
最近では,何らかのフレームワークにアプリケーションコードが依存しないように,POJO(Plain Old Java Object)なアプリケーションコードを開発することが当たり前になりつつある。Wicketにおいても,アプリケーションコードはPOJOで書かれることが想定された作りになっている。
具体的には,WicketのコンポーネントとPOJOとの連携を,IModelインタフェースを使って行う。IModelインタフェースの実装クラスがWicketではいくつか提供されているので,適切なものを使って連携を行えば良い。今回は連携の第一歩として,POJOが持つプロパティをLabelコンポーネントに割り当ててみよう。
まずはPOHPから。これは「 Labelを使った動的な文字列の表示」と変わらない。
ここに名前が入る
次に,nameプロパティを持つEmployeeというPOJOをここでは使用する。一般的なJavaBeansだ。
public class Employee implements Serializable { private String name; public void setName(String name) { this.name = name; } public String getName() { return name; } }
このEmployeeオブジェクトのnameプロパティをLabelコンポーネントに割り当てるために,Wicketが提供しているPropertyModelクラスを使用する。WebPageクラスのサブクラス内で以下のように記述する。
Employee employee = new Employee(); employee.setName(“よういちろう”); add(new Label(“name”, new PropertyModel(employee, “name”));
PorpertyModelクラスのコンストラクタに,対象となるPOJOと,プロパティの名前を渡している。これをLabelコンポーネントのコンストラクタに渡すことで,Employeeオブジェクトからプロパティを自動的に取得してLabelコンポーネントがレンダリングを行うようになる。この実行結果は,もちろん,
よういちろう
となる。注意すべき点として,PropertyModelに渡すPOJOには,Serializableインタフェースが実装されている必要がある。
が,「 開発の準備をしよう」を行っただけの状態では,実行するとNoClassDefFoundErrorが発生してしまうだろう。実は,WicketはOGNLを使っている。先ほどのPropertyModelクラスのコンストラクタの第2引数は,OGNLの式を記述できるのだ。
OGNLのライブラリは,Wicketコアのlibディレクトリに「ognl-2.6.7.jar」という名前で提供されている。このファイルを,WTPのプロジェクトの「wicket-test/WebContent/WEB-INF/lib」にドラッグ&ドロップする。その後実行すれば,正しく処理されるようになるだろう。