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」にドラッグ&ドロップする。その後実行すれば,正しく処理されるようになるだろう。

このエントリーをはてなブックマークに追加

関連記事

2023年のRemap

Remapにファームウェアビルド機能を追加しました

Google I/O 2023でのウェブ関連のトピック

2022年を振り返って

現在のRemapと今後のRemapについて