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内で使用することの
方が多いでしょう。