データソースと UI コンポーネント間の変換を自分でやりたい時は、コンバーターのクラス名をコンバーター タグ表現の中で指定して、データバィンディングマネージャーにデータソースと UI コンポーネント間の独自の流儀の変換方法を使用することを知らせます。
<component-name attribute-name="@{bean-name.attribute- name,
converter='class-name'
}"/>
複数の定義は許されません。そして後からの定義が以前の定義を上書きします。
TypeConverter を実装するクラスを定義します。valueト オブジェクトを UI コンポーネントの属性タイプに変換します。
value オブジェクトを bean プロパティ タイプに変換します。
コンバーターのクラス名をコンバーター タグ表現内に指定します。
以下のサンプルでは、ブーリアン value を純テキストの替わりに異なったイメージに変換する方法をデモします。
まず最初に、 TypeConverter を実装するクラスを定義します。 myTypeConverter はブーリアンをそれぞれの異なったイメージに変換します。
import org.zkoss.zkplus.databind.TypeConverter;
import org.zkoss.zul.Listcell;
public class myTypeConverter implements TypeConverter {
public Object coerceToBean(java.lang.Object val, org.zkoss.zk.ui.Component comp) {
return null;
}
public Object coerceToUi(java.lang.Object val, org.zkoss.zk.ui.Component comp)
{
boolean married = (Boolean) val;
if (married)
((Listcell) comp).setImage("/img/true.png");
else
((Listcell) comp).setImage("/img/false.png");
return null;
}
}
myTypeConverter を convert タグ表現とともに person インスタンスの married 属性に関連付けられるように指定します。
<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit"?>
<window width="500px">
<zscript><![CDATA[
//prepare the example persons List
List persons = new ArrayList();
persons.add(new Person("Tom", "Yeh", true));
persons.add(new Person("Henri", "Chen", true));
persons.add(new Person("Jumper", "Chen", false));
persons.add(new Person("Robbie", "Cheng", false));
]]>
</zscript>
<listbox rows="4" model="@{persons}">
<listhead>
<listheader label="First Name" width="100px" />
<listheader label="Last Name" width="100px" />
<listheader label="Married" width="100px" />
</listhead>
<listitem self="@{each=person}">
<listcell label="@{person.firstName}"/>
<listcell label="@{person.lastName}"/>
<listcell label="@{person.married, converter='myTypeConverter'}"/>
</listitem>
</listbox>
</window>