PGBox
P
G
Box

logic iterateタグ

logicタグのメニューへ戻る



使用した環境
JDK 6 Update 11
struts 1.3.10

bean内の配列や、Listなどコレクションの繰り返しを行います。


属性必須意味
id繰り返し中の現在のbeanを、ページスコープにセットする名前。
name繰り返し対象のbean名を指定する。
property繰り返し対象のbeanのプロパティ名を指定する。
scope繰り返し対象のbeanを取得するスコープを指定する。page・request・session・applicationのいずれかを指定。省略時は自動的にbeanが存在するスコープが検索される。
collection繰り返し対象の配列やコレクションを、スクリプトレットやEL式で直接指定する。
indexId繰り返し中の、現在のインデックス番号をページスコープにセットする名前。指定した場合、Integerがセットされる。
type使用するコレクションの型を指定する。
offset繰り返しを開始するインデックス番号を指定する。省略した場合は0から。
length繰り返しを終了するインデックス番号を指定する。



例えば、Formが以下のように定義されており
import java.util.List;
import org.apache.struts.action.ActionForm;
import org.apache.struts.util.LabelValueBean;

public class SampleForm extends ActionForm {
    
    private List<LabelValueBean> labelValueList;
    
    ※ 以下、setter, getter
}

Actionでは以下のように処理したとします。
public ActionForward execute(ActionMapping mapping, ActionForm form0, ...
    SampleForm form = (SampleForm) form0;

    List<LabelValueBean> labelValueList = new ArrayList<LabelValueBean>();
    labelValueList.add(new LabelValueBean("ラベル1", "value1"));
    labelValueList.add(new LabelValueBean("ラベル2", "value2"));
    labelValueList.add(new LabelValueBean("ラベル3", "value3"));
    labelValueList.add(new LabelValueBean("ラベル4", "value4"));
    labelValueList.add(new LabelValueBean("ラベル5", "value5"));
    
    form.setLabelValueList(labelValueList);
    
    return mapping.findForward("success");
}


フォームが保持しているリストを繰り返し処理するには、JSPで以下のようにします。
<logic:iterate id="labelValueBean" name="SampleForm" property="labelValueList">
    
    label:<bean:write name="labelValueBean" property="label" />&nbsp;&nbsp;
    value:<bean:write name="labelValueBean" property="value" /><br />
    
</logic:iterate>


結果は以下のようになります。
label:ラベル1  value:value1
label:ラベル2  value:value2
label:ラベル3  value:value3
label:ラベル4  value:value4
label:ラベル5  value:value5



また、以下のようにスクリプトレットやEL式でcollection属性に直接beanを指定する事もできます。
<logic:iterate id="labelValueBean" collection="${SampleForm.labelValueList}">



サンプル:tableの偶数行のみ背景色を変更する


以下のサンプルでは、<table>タグを使用して一覧を作成しています。
indexId属性を使用し、現在のループインデックス番号を取得し、EL式で偶数行のみ背景色を変更する処理も行っています。
<table>
    <tr>
        <th>label</th>
        <th>value</th>
    </tr>
    <logic:iterate id="labelValueBean" name="SampleForm" property="labelValueList" indexId="indexNo">
        <tr${indexNo % 2 == 0 ? "" : " style=¥"background-color:#bbbbbb;¥""}>
            <td><bean:write name="labelValueBean" property="label" /></td>
            <td><bean:write name="labelValueBean" property="value" /></td>
        </tr>
    </logic:iterate>
    </tr>
</table>
EL式についての説明はこちらを参照してください。

EL式が使用できない環境の場合は以下のように、スクリプトレットを使用しても同様の処理が行えます。
<table>
    <tr>
        <th>label</th>
        <th>value</th>
    </tr>
    <logic:iterate id="labelValueBean" name="SampleForm" property="labelValueList" indexId="indexNo">
        <tr <%= indexNo % 2 == 0 ? "" : " style=¥"background-color:#bbbbbb;¥"" %> >
            <td><bean:write name="labelValueBean" property="label" /></td>
            <td><bean:write name="labelValueBean" property="value" /></td>
        </tr>
    </logic:iterate>
    </tr>
</table>



実行すると、以下のようなhtmlが出力されます。
<table>
    <tr>
        <th>label</th>
        <th>value</th>
    </tr>
    
        <tr>
            <td>ラベル1</td>
            <td>value1</td>
        </tr>
    
        <tr style="background-color:#bbbbbb;">
            <td>ラベル2</td>
            <td>value2</td>
        </tr>
    
        <tr>
            <td>ラベル3</td>
            <td>value3</td>
        </tr>
    
        <tr style="background-color:#bbbbbb;">
            <td>ラベル4</td>
            <td>value4</td>
        </tr>
    
        <tr>
            <td>ラベル5</td>
            <td>value5</td>
        </tr>
    
    </tr>
</table>





logicタグのメニューへ戻る