トップ 一覧 ping 検索 ヘルプ RSS ログイン

Struts2 iteratorの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!Struts2 iterator タグ
{{include_html import_keyword_html, "!struts2"}}

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"}}