Home   Single Page

ZUML ページにアノテーシションを付加する

アノテーションはZUMLページの中でコンポーネントとプロパティの宣言に適用できます。それらにアノテーションを付加する方法は二つあります。従来の方法とシンプルな方法です。どちらを使うかは好みの問題です。また、それらをミックスして使用することもできます。

コンポーネントの宣言にアノテーションを付加する従来の方法

アノテーションは付加したい要素の宣言の前にあります。:

<window xmlns:a="http://www.zkoss.org/2005/zk/annotation">
    <vbox>    
        <a:author name="John Magic" date="3/17/2006"/>        
        <listbox>        
        </listbox>        
...

アノテーションは http://www.zkoss.org/2005/zk/annotation ネーム空間の中の要素です。要素名と属性はプログラマーが使うツールによって何でも可能です。同一のコンポーネント宣言に複数のアノテーションを付加することができます。

<a:author name="John Magic"/>
<a:editor name="Mary White" date="4/11/2006"/>
<listbox/>

ここでは、author と editor がアノテーションの名前で、名前と日付が属性名です。つまり、アノテーションは名前と属性のマップから成り立っています。
宣言をアノテートしているアノテーションは同じ名前を持っている場合、マージすることができます。たとえば、

<a:define var1="auto"/>
<a:define var2="123"/>
<listbox/>

上は以下と同様です。

<a:define var1="auto" var2="123"/>
<listbox/>

【メモ】: アノテーションではEL表記は使えません。

プロパティ宣言にアノテーションを付加する従来の方法

プロパティ宣言に注釈をつけるには、アノテーションを以下に示すようにプロパティの宣言の前におきます。

<listitem a:bind="datasource='author',name='name'" value="${author.name}"/>

また、attribute要素を使用して、コンポーネント宣言と同様の形で、プロパティの宣言に注釈をつけることもできます。つまり、上のアノテーションは以下と同様の働きをします。

<listitem>
    <a:bind datasource="author" name="name"/>    
    <attribute name="value">${author.name}</attribute>    
</listitem>

【メモ】:アノテーションの属性名が省略される場合、その名前はvalueと想定されます。たとえば、

<listitem a:bind="value='selected'" value=""/>

上は以下と同様です。

<listitem a:bind="selected" value=""/>

プロパティ宣言にアノテーションを付加するシンプルな方法

上に説明したように、特定のXMLネーム空間を使用してアノテーションを付加するほかに、もう一つプロパティにアノテーションを付加するシンプルな方法があります。以下に示すように、アノテーションを付加するプロパティにアノテーション表記を使用して値を指定します。

<listitem label="@{bind(datasource='author',selected)}"/>

アノテーションのフォーマットは@{annot-name(attr-name1=attr-value1,attr-name2=attr-value2)}です。つまり、プロパティの値がアノテーション表記になっていたら、それは対応するプロパティの値として認識されるのではなく、アノテーションとして認識されます。上の例では、bindと呼ばれるアノテーションはlabelプロパティにアノテーションを付加します。こうして、上の例は以下と同じ働きをします。

<listitem a:bind=" datasource='author',selected" label=""/>

アノテーション名が指定されてない場合、名前は default とみなされます。例えば、以下のコードスニペットはdefaultの名前のついたアノテーションを使ってlabelにアノテーションを付加します。そのアノテーションはひとつの属性を持っていて、その値と名前はそれぞれvalueとselected.nameです。

<listitem label="@{selected.name}"/>

つまり、上は以下のコードスニペットと同様です。

<listitem label="@{default(value='selected.name')}"/>

【メモ】:以下に示すように、同一のプロパティに複数のアノテーションををつけられます。

<listitem label="@{ann1(selected.name) ann2(attr2a='attr2a',attr2b)}"/>

コンポーネント宣言にアノテーションを付加するシンプルな方法

同様に、以下のようにselfと呼ばれる特殊な属性にアノテーション表記を指定することで、コンポーネントにアノテーションを付加できます。

<listitem self="@{bind(each=person)}"/>

ここで、selfはなんらかのプロパティではなく、コンポーネント宣言にアノテーションを付加することを指示するキーワードです。以下と同様の働きをします。

<a:bind each="person"/>
<listitem/>