4月 7th, 2008at 14:24

Tags: ,

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