まず<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" ?>でデータバインダーを初期化します。
Seasarコンポーネントを生成後selectRainfallAvgメソッドを実行しrainfallAvgを作成します。
model="@{rainfallAvg}"でZKのListboxとJavaのListを関連付けるとロード時にデータバインダーによってJavaのListからZKのListModelに変換されます。
selectedItem="@{selected}"は選択された行に対応したビーンに関連付けられた変数selectedを準備します。選択された行を明細表示するのに変数selectedのプロパティが利用出来ます。
self="@{each=rainfall}"はListの各行に対応したビーンをrainfallと言う名前で関連付けます。
<?xml version="1.0" encoding="UTF-8"?>
<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" ?>
<zk xmlns="http://www.zkoss.org/2005/zul" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.zkoss.org/2005/zul/zul.xsd ">
<window title="東京 年間降雨量デモ" width="500px" border="normal">
<zscript>
import org.seasar.framework.container.SingletonS2Container;
rainStatsService = SingletonS2Container.getComponent("rainStatsService");
rainfallAvg = rainStatsService.selectRainfallAvg();
</zscript>
<listbox model="@{rainfallAvg}" id="rainfallListbox" rows="5" selectedItem="@{selected}">
<listhead>
<listheader label="年度"/>
<listheader label="平均降雨量(mm)"/>
</listhead>
<listitem self="@{each=rainfall}">
<listcell label="@{rainfall.year}"/>
<listcell label="@{rainfall.average}"/>
</listitem>
</listbox>
<vbox>
<hbox>年度: <label value="@{selected.year}"/></hbox>
<hbox>平均降雨量:<label value="@{selected.average}"/></hbox>
</vbox>
</window>
</zk>
次のメソッドを実行するとデータベースからリロードすることができます。
void refreshRainfallListbox(){
List list = rainfallListbox.getModel();
list.clear();
list.addAll(rainStatsService.selectRainfallAvg());
}