Struts2 <s:lterator>標簽的一個復雜應用 解析

jopen 11年前發布 | 27K 次閱讀 Struts2 Web框架

官網對iterator標簽的描述:

Description

Iterator will iterate over a value. An iterable value can be any of: java.util.Collection, java.util.Iterator,

Parameters
 

Name

Required

Default

Evaluated

Type

Description

id false false String Deprecated(棄用). Use 'var' instead
status false false false Boolean If specified, an instanceof IteratorStatus will be pushed into stack upon each iteration
value false false String the iteratable source to iterate over, else an the object itself will be put into a newly created List
var false false String Name used to reference the value pushed into the Value Stack

 

下面來看一段相關的代碼:

   <s:form id="materialForm" action="addMaterial" theme="simple">
   <table>
   <tr>
   <td>材料名</td>
   <td>價格</td>
   <td>庫存量</td>
   <td>過期日期</td>
   </tr>
   <s:iterator value="new int[4]" status="m">
   <tr>
   <td><s:textfield name="%{'materialList['+#m.index+'].material'}" /></td>
            <td><s:textfield name="%{'materialList['+#m.index+'].bid'}" /></td>
            <td><s:textfield name="%{'materialList['+#m.index+'].mount'}" /></td>
            <td><sx:datetimepicker name="%{'materialList['+#m.index+'].expireDate'}" /></td>
   </tr>
   </s:iterator>
   <tr>
   <td colspan="4"><s:submit value="提交"></s:submit>
   </tr>
   </table> 
   </s:form>

此段代碼的頁面顯示為:

Struts2 <s:lterator>標簽的一個復雜應用 解析

<s:iterator value="new int[4]"  status="m">解析:迭代創建一個新的包含4個元素的整型(只能是int或能直接轉成int的類型如byte也可以,String、double就不行)數組集合,迭代的次數就是元素個數4,創建的Object將會放入此集合里面去,如果value="new int[3]",則頁面只顯示3行文本框。此迭代器的"迭代狀態碼"設為"m",每一次迭代對應一個狀態數據,"迭代狀態碼"有屬性index和count,其中"count" is 1-based, "index" is 0-based。

對于上面的代碼name="%{ 'materialList['+#m.index+'].bid' }"(其中要傳遞的materialList是List<Material>類型的),解析:“%{}”:取大括號里面的OGNL表達式的字符串類型值,#m.index:取當前"迭代狀態碼"的index屬性值,在第一次迭代時它的值就是0,materialList[x]:要去傳遞的materialList實例屬性(此屬性可能就是其他類的實例)的第x+1個元素,materialList[x].bid:即集合materialList實例的第x+1個元素的bid屬性。materialList集合實例有4個Material類型元素,每個元素都有material、bid、mount、expireDate這四個屬性。總的意思:創建一個文本框,它要提交的數據是materialList這個包含了Material元素(此元素又包含了相關屬性)的集合實例。 

再看一個迭代輸出的例子:

            <s:iterator value="materialList" >
            <tr>
            <td><s:property value="material" ></s:property></td>
            <td><s:property value="bid" ></s:property></td>
            <td><s:property value="mount" ></s:property></td>
            <td><s:property value="expireDate" ></s:property></td>
            </tr>
            </s:iterator>

以上代碼是迭代輸出materialList集合中Material類型元素中的所有屬性值。雖然materialList中沒有直接的material  bid  mount  expireDate屬性,但它的Material類型的元素有,這樣通過迭代materialList集合就可以輸出最深處的屬性值了。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!