| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

Struts2 iterator

提供: MyMemoWiki
ナビゲーションに移動 検索に移動

Struts2 iterator タグ

Iterator は、java.util.Collection、 java.util.Iterator を実装した値の繰り返し処理を行う。

タグ名 必須 デフォルト 評価 内容
id false true String 要素参照用ID. UIや、FORMタグ用。HTMLのid属性として利用される。
status false false true Boolean 指定された場合、IteratorStatusのインスタンスは、スタックの上に積まれる。
value false true String 繰り返し可能なソース、その他、新たに生成されたリストに自身が登録されたオブジェクト。

value statck 上のカレントオブジェクトのgetDays()メソッドの値を参照し、繰り返し利用する例。<s:property/>タグがイテレータの現在値を出力する。
<s:iterator value="days">
  <p>day is: <s:property/></p>
</s:iterator>
Beanタグを利用し、ActionContextに格納する例。iteratorタグは、ActionContextからオブジェクトを参照し、getDays()メソッドを呼び出す。status属性も、IteratorStatusオブジェクトを生成するのに使用され、例では、odd()メソッドが、行の色を変更するのに利用されている。
<s:bean name="org.apache.struts2.example.IteratorExample" id="it">
  <s:param name="day" value="'foo'"/>
  <s:param name="day" value="'bar'"/>
</s:bean>
<p/>
<table border="0" cellspacing="0" cellpadding="1">
<tr>
  <th>Days of the week</th>
</tr>
<p/>
<s:iterator value="#it.days" status="rowstatus">
  <tr>
    <s:if test="#rowstatus.odd == true">
      <td style="background: grey"><s:property/></td>
    </s:if>
    <s:else>
      <td><s:property/></td>
    </s:else>
  </tr>
</s:iterator>
</table>
次の例は、かなりstatus属性を実例的に説明している。DAO をactionクラスから(Object-Graph Navigation Language 式言語の一種。JSPやJSFのELと比較して非常に強力な記述能力を持つ) 経由で使用する場合、グループおよび所属するユーザを繰り返し処理する。last()メソッドは、カレントオブジェクトが最後の要素であることを示し、最終要素でない場合、ユーザをカンマで区切る。
<s:iterator value="groupDao.groups" status="groupStatus">
     <tr class="<s:if test="#groupStatus.odd == true ">odd</s:if><s:else>even</s:else>">
         <td><s:property value="name" /></td>
         <td><s:property value="description" /></td>
         <td>
             <s:iterator value="users" status="userStatus">
                 <s:property value="fullName" /><s:if test="!#userStatus.last">,</s:if>
             </s:iterator>
         </td>
     </tr>
 </s:iterator>
actionのコレクションを繰り返し処理し、イテレータの値を他のactionに渡す。ここでは、'[0]'というトリックが使われている。これは、

カレントのイテレータの値を取得し、edit actinに引き渡す。'[0]'を利用すると、>s:property />と同様の効果が得られる。

<s:action name="entries" id="entries"/>
     <s:iterator value="#entries.entries" >
         <s:property value="name" />
         <s:property />
         <s:push value="...">
             <s:action name="edit" id="edit" >
                 <s:param name="entry" value="[0]" />
             </s:action>
         </push>
     </s:iterator>
単純なループをiteratorタグでシミュレートするには、以下のようにします。
<s:iterator status="stat" value="{1,2,3,4,5}" >
   <!-- grab the index (start with 0 ... ) -->
   <s:property value="#stat.index" />
   <!-- grab the top of the stack which should be the -->
   <!-- current iteration value (0, 1, ... 5) -->
   <s:property value="top" />
</s:iterator>

{{include_html banner_html, "!Struts"}}