Struts2.0.9のiteratorタグ

感想おまちしてます!

ループ処理に使えるタグ。シンプルになった気がする。

Struts document iterator tag

スポンサーリンク

Listに入ったオブジェクトを表示する

Listの中にUserVOというオブジェクトが入っている場合の表示方法。propertyタグを使ってUserVOのアクセッサを呼び出している。

<table border="1">
<tr>
<th>ユーザ名</th>
<th>パスワード</th>
</tr>

<s:iterator value="userList">
<tr>
<td><s:property value="userName" /></td>
<td><s:property value="password" /></td>
</tr>
</s:iterator>
</table>

2重ループ

UserVO.addressListにはListが入っているとする。userListでループして、その中にあるデータをさらにループさせる場合は以下のようになった。「○○のaddressList」みたいな書き方ではないので違和感を感じる。

<s:iterator value="userList">
<tr>
<td><s:property value="userName" /></td>
<td><s:property value="password" /></td>
<td>
<s:iterator value="addressList">
<s:property /><br />
</s:iterator>
</td>
</tr>
</s:iterator>

ListにStringが入っている場合

propertyタグを使えばString文字列がそのまま表示される。中でtoStringメソッドを読んでいるのかも。

<s:iterator value="userList">
<li><s:property /></li>
</s:iterator>

行の背景に色を交互につける

一行ごとに行の背景色を変えたい場合は「IteratorStatus」を作成すればいい。以下の例では「#rowstatus.odd == true」の場合に背景色が変わる。どうもoddは奇数行のときにtrueになるみたい。今回はrowstatusにしているけど、この名前は何でもOKぽい。どんな名前をつけても結局IteratorStatusができるのかも。

 <s:iterator value="userList" status="rowstatus">
<s:if test="#rowstatus.odd == true">
<div style="background-color:red"><s:property /></div>
</s:if>
<s:else>
<div><s:property /></div>
</s:else>
</s:iterator>

最後の要素かを判定する

IteratorStatusを使えば、現在のデータが最後のデータかどうかを判定できる。

<s:iterator value="userList">
<s:property value="userName" />,
<s:property value="password" />,
<s:iterator value="addressList" status="itStatus">
<s:property />
<s:if test="!#itStatus.last">,</s:if>
</s:iterator>
<br />
</s:iterator>

上記記述によって、最後ではない場合にカンマをつけることができた。

//表示例
userName0, password0, address = 0 , address = 0
userName1, password1, address = 1 , address = 1
userName2, password2, address = 2 , address = 2
userName3, password3, address = 3 , address = 3
userName4, password4, address = 4 , address = 4