Struts2:Iteratorタグのstatusとか | プログラム垂れ流し

Struts2:Iteratorタグのstatusとか

●パターン1
Struts2.1.8ではIteratorタグでbegin,end,stepが使えるようになりました。
Struts2.0.xでは使えませんでしたね。

何してくれるかっつうと
<s:iterator value="{0,1,2,3,4,5,6,7,8}" begin="0" end="8" step="2" status="st">
    value:<s:property/>
    index:<s:property value="#st.index"/>
    count:<s:property value="#st.count"/>
    odd:<s:property value="#st.odd"/>
    even:<s:property value="#st.even"/>
    first:<s:property value="#st.first"/>
    last:<s:property value="#st.last"/>
    modulus(3):<s:property value="#st.modulus(3)"/><br>
</s:iterator>

って書くと、

value:0 index:0 count:1 odd:true even:false first:true last:false modulus(3):1
value:2 index:1 count:2 odd:false even:true first:false last:false modulus(3):2
value:4 index:2 count:3 odd:true even:false first:false last:false modulus(3):0
value:6 index:3 count:4 odd:false even:true first:false last:false modulus(3):1
value:8 index:4 count:5 odd:true even:false first:false last:true modulus(3):2

が出力されます。

@@ 説明 @@
index→0からのカウント
count→1からのカウント
odd→奇数行ならture
even→偶数行ならtrue
first→最初のループならtrue
last→最後のループならtrue
modulus(n)→countをnで割った余り


これは、beginでvalueの0番目から、endで8番目まで繰り返す。
さらに、次のループではstep数先の値を使うという記述です。
しかし、valueにActionから引っ張ったIteratorやCollectionを使用すると、
begin,end,stepは使えないみたいです。

●パターン2
本当に簡単なループがしたいだけならこでもいいです。
<s:iterator status="stat" value="(10).{ #this }" >
    <s:property value="#stat.count" />
</s:iterator>

結果→1 2 3 4 5 6 7 8 9 10

書いた数だけループします。

●パターン3
普段はこっちを使うほうが多いですね。
これは前回の記事にも書きましたが、再度紹介します。
<s:iterator status="st" value="hogeList">
    <s:textfield name="name"/>
    <s:textfield name="age"/>
    <s:textfield name="sex"/>
    <s:property value="updateDate"/>
    <s:hidden name="tagId"/>
</s:iterator>

この例ではhogeListにname,age,sex,updateDateが定義されたモデルクラスのリストを突っ込んで表示させています。

参考:http://struts.apache.org/2.1.8.1/struts2-core/apidocs/org/apache/struts2/components/IteratorComponent.html