Forコンポーネントはループをしながら表示を行うためのコンポーネントです。
ループ元(ソースオブジェクト)には、コレクションやイテレータ、配列などが
指定できます。今回は、Form外でまずForコンポーネントを使用してデータを
表示してみます。
[HTMLテンプレート]
<!--
Forコンポーネントを使用しリストを表示する。
(Forコンポーネントを使用。)
コンポーネントの使用方法については下記参照。
-->
<br/>
<hr/>
<div id="for_001" align="center">
<b>
Forコンポーネントを使用(1)<br/>
<br/>
ForコンポーネントをFormコンポーネント外で使用。<br/>
</b>
<br/>
出力: <br/>
<table border="1">
<tr>
<th>インデックスの値</th>
<th>Value 1</th>
<th>Value 2</th>
<th>Value 3</th>
<th>Value 4</th>
</tr>
<!--
Forコンポーネント
・source属性は、元となるコレクションもしくは配列もしくはイテレータを指定する
・value属性には、ループ変数を指定する
・index属性には、カウント変数を指定する
・element属性には、ループ毎にこのコンポーネントのbody部に記述されているデータを
囲む要素を指定する。通常、Forコンポーネントはtable内部で使用されることが多いので
trを指定することが多い模様。
-->
<!--
今回、リストデータの作成に、org.apache.tapestry.event.PageBeginRenderListenerを
使用して初期リスト作成を行っている。
また、value属性とindex属性に指定されている一時変数はページコンポーネントクラス(Javaクラス)に
記述せず、ページ仕様ファイルにプロパティとして定義している。
-->
<tr jwcid="@For" source="ognl:for001Values" value="ognl:aFor001Value" index="ognl:for001Index" element="literal:tr">
<td><span jwcid="@Insert" value="ognl:for001Index">値0</span></td>
<td><span jwcid="@Insert" value="ognl:aFor001Value.value1">値1</span></td>
<td><span jwcid="@Insert" value="ognl:aFor001Value.value2">値2</span></td>
<td><span jwcid="@Insert" value="ognl:aFor001Value.value3">値3</span></td>
<td>
<span jwcid="@If" condition="ognl:aFor001Value.value4">○</span>
<span jwcid="@Else">×</span>
</td>
</tr>
</table>
<br/>
</div>
<hr/>
<br/>
[ページ仕様ファイル]
<page-specification class="gsf.samples.tapestry.ThirdSample"> <property name="radio001" initial-value="ognl:@gsf.samples.tapestry.ThirdSample@RADIO001"/> <property name="aFor001Value"/> <property name="for001Index"/> </page-specification>
[データクラス]
package gsf.samples.tapestry; import java.io.*; public class For001Value implements Serializable{ private String value1; private String value2; private Integer value3; private boolean value4; /** * Get value1. * * @return value1 as String. */ public String getValue1(){ return this.value1; } /** * Set value1. * * @param value1 the value to set. */ public void setValue1(String value1){ this.value1 = value1; } /** * Get value2. * * @return value2 as String. */ public String getValue2(){ return this.value2; } /** * Set value2. * * @param value2 the value to set. */ public void setValue2(String value2){ this.value2 = value2; } /** * Get value3. * * @return value3 as Integer. */ public Integer getValue3(){ return this.value3; } /** * Set value3. * * @param value3 the value to set. */ public void setValue3(Integer value3){ this.value3 = value3; } /** * Get value4. * * @return value4 as boolean. */ public boolean getValue4(){ return this.value4; } /** * Set value4. * * @param value4 the value to set. */ public void setValue4(boolean value4){ this.value4 = value4; } }
[ページコンポーネントクラス]
package gsf.samples.tapestry; import java.util.*; import org.apache.tapestry.*; import org.apache.tapestry.event.*; import org.apache.tapestry.html.*; public abstract class ThirdSample extends BasePage implements PageBeginRenderListener{ public static final String RADIO001 = "radio button 1"; public static final String RADIO002 = "radio button 2"; public static final String RADIO003 = "radio button 3"; /** * PageBeginRenderListenerの実装メソッド.<br/> * このメソッドは、ページがリクエストされる毎に最初に呼ばれる。<br/> * * @param event イベントオブジェクト */ public void pageBeginRender(PageEvent event){ this.createFor001Values(); } private void createFor001Values(){ List<For001Value> values = new ArrayList<For001Value>(); for(int i = 0; i < 20; i++){ For001Value aFor001Value = new For001Value(); aFor001Value.setValue1("value1-" + i); aFor001Value.setValue2("value2-" + i); aFor001Value.setValue3(i); if((i % 2) == 0){ aFor001Value.setValue4(true); }else{ aFor001Value.setValue4(false); } values.add(aFor001Value); } this.setFor001Values(values); } public abstract boolean getCheckbox001(); public abstract void setCheckbox001(boolean value); public abstract String getRadio001(); public abstract void setRadio001(String value); public abstract List<For001Value> getFor001Values(); public abstract void setFor001Values(List<For001Value> values); }
実行すると、画面上にテーブルが表示されます。
次は、Form内でForコンポーネントを使用してみます。
実際の開発では一覧画面からデータを修正したり、IDから
別ページに遷移したりするのが多いので、Form内で使用することの
方が多いでしょう。