【摘要】本文主要介紹及演示了Struts迭代器(iterator)遍歷List經常使用的4種例子,基於MyEclipse開發環境,重點關注先後端代碼的實現,給出後端java代碼、前段struts標籤代碼,主要有以下4個例子:java
1. 遍歷List<String>後端
2. 遍歷List<List<String>>
3. 遍歷UserEntity
4. 遍歷List<UserEntity>jsp
例子的詳細代碼請參考附件1,給出兩個4個例子的運行截圖(以下圖1):
圖1:遍歷Listd的4個例子運行結果
關鍵詞:Struts標籤,iterator迭代器,List<String>,List<List<String>>ide
一、遍歷List<String> spa
(1)後臺TestAction.java 部分代碼: 3d
1 // TODO 給list賦值 2 if (list==null) { 3 list=new ArrayList<String>(); 4 list.add("劉備"); 5 list.add("關羽"); 6 list.add("張飛"); 7 list.add("趙雲"); 8 }
(2)前臺jsp+s標籤部分源代碼:code
1 <%--List<String>遍歷--%> 2 <table width="242" height="256" border="1" cellpadding="1" 3 cellspacing="1"> 4 <caption> 5 List<String>遍歷 6 </caption> 7 <tr> 8 <%-- 9 說明:<s:iterator id="別名" value="後臺List變量名"> 10 <s:if test="#別名!=null"> 11 --%> 12 <s:iterator id="li" value="list"> 13 <td> 14 <s:if test="#li!=null"> 15 <s:property /> 16 </s:if> 17 </td> 18 </s:iterator> 19 </tr> 20 </table>
注:遍歷List<String>運行結果參考上圖1(左上)對象
二、遍歷List<List<String>>blog
(1)後臺TestAction.java 部分代碼: ip
1 // TODO 給listList賦值(二維列表List) 2 if (listList==null) { 3 listList=new ArrayList<List<String>>(); 4 List<String> li=new ArrayList<String>(); 5 li.add("姓名"); 6 li.add("勢力"); 7 li.add("職務"); 8 listList.add(li); 9 /*List爲引用類型(以地址方式保存一維List對象), 10 添加不一樣List到二維列表需再實例化 */ 11 li=new ArrayList<String>(); 12 li.add("劉備"); 13 li.add("蜀"); 14 li.add("老大"); 15 listList.add(li); 16 li=new ArrayList<String>(); 17 li.add("關羽"); 18 li.add("蜀"); 19 li.add("老2"); 20 listList.add(li); 21 li=new ArrayList<String>(); 22 li.add("張飛"); 23 li.add("蜀"); 24 li.add("老3"); 25 listList.add(li); 26 li=new ArrayList<String>(); 27 li.add("趙雲"); 28 li.add("蜀"); 29 li.add("大將"); 30 listList.add(li);
(2)前臺jsp+s標籤部分源代碼:
1 <%--List<List<String>>遍歷--%> 2 <table width="242" height="256" border="1" cellpadding="1" 3 cellspacing="1"> 4 <caption> 5 List<List<String>>遍歷以下: 6 </caption> 7 <s:iterator value="#request.listList" status="st"> 8 <tr> 9 <s:iterator value="#request.listList.get(#st.index)"> 10 <td valign="middle" align="center"> 11 <s:property /> 12 </td> 13 </s:iterator> 14 </tr> 15 </s:iterator> 16 </table>
注:遍歷List<List<String>>運行結果參考上圖1(右上)
三、遍歷UserEntity
(1)後臺TestAction.java 部分代碼:
1 // TODO 給UserEntity賦值 2 if (userEntity==null) { 3 userEntity=new UserEntity("諸葛亮","男",37); 4 }
(2)前臺jsp+s標籤部分源代碼:
1 <%--UserEntity遍歷以下:--%> 2 <table width="242" height="256" border="1" cellpadding="1" 3 cellspacing="1"> 4 <caption> 5 UserEntity遍歷以下: 6 </caption> 7 <tr> 8 <%--<td><s:property value="#變量名.屬性名" /></td>--%> 9 <td> 10 <s:property value="userEntity.name" /> 11 </td> 12 <td> 13 <s:property value="userEntity.sex" /> 14 </td> 15 <td> 16 <s:property value="userEntity.age" /> 17 </td> 18 </tr> 19 </table>
四、遍歷List<UserEntity>
(1)後臺TestAction.java 部分代碼:
1 // TODO 給List<UserEntity>賦值 2 if (users==null) { 3 users=new ArrayList<UserEntity> (); 4 UserEntity user=new UserEntity("張飛","男",18); 5 users.add(user); 6 user=new UserEntity("李斯","男",19); 7 users.add(user); 8 user=new UserEntity("王武","男",20); 9 users.add(user); 10 user=new UserEntity("小喬","女",21); 11 users.add(user); 12 }
(2)前臺jsp+s標籤部分源代碼:
1 <%-- List<UserEntity>遍歷以下:--%> 2 <table width="242" height="256" border="1" cellpadding="1" 3 cellspacing="1"> 4 <caption> 5 List<UserEntity>遍歷以下: 6 </caption> 7 <tr> 8 <th> 9 姓名 10 </th> 11 <th> 12 性別 13 </th> 14 <th> 15 年齡 16 </th> 17 </tr> 18 <s:iterator id="u" value="users"> 19 <%-- 20 <s:iterator id="別名" value="要遍歷的集合"> 21 users:對應後臺Action類的List<UserEntity> users; 22 --%> 23 <tr> 24 <%--<td><s:property value="#別名.實體類屬性名" /></td>--%> 25 <td> 26 <s:property value="#u.name" /> 27 </td> 28 <td> 29 <s:property value="#u.sex" /> 30 </td> 31 <td> 32 <s:property value="#u.age" /> 33 </td> 34 </tr> 35 </s:iterator> 36 </table>
注:遍歷List<UserEntity>運行結果參考上圖1(右下)
五、用法比較
(1)比較List<String>和UserEntity
它們遍歷顯示效果相似,可是細心的朋友會發現,它們主要有如下區別:
區別1:List<String>的遍歷須要iterator迭代器如<s:iterator id="別名" value="後臺List變量名">,且不須要value屬性直接用<s:property />獲取列表元素;
區別2:UserEntity剛相反,不須要iterator迭代器,但須要value屬性<s:property value="#變量名.屬性名" />來獲取列表元素。
(2)比較List<List<String>>和List<UserEntity>
它們遍歷顯示效果也相似,它們也有如下區別:
區別1:List<List<String>>因爲列表沒有屬性須要藉助迭代器的屬性status="st",
如:
<s:iterator value="#request.listList" status="st"> <tr> <s:iterator value="#request.listList.get(#st.index)"> <td valign="middle" align="center"> <s:property /> </td> </s:iterator> </tr> </s:iterator>
區別2:List<UserEntity>則簡單多,借用迭代器iterator的id、value屬性,再用<s:property value="#別名.實體類屬性名" />獲取
如:
<s:iterator id="u" value="users"> <tr> <td> <s:property value="#u.name" /> </td> <td> <s:property value="#u.sex" /> </td> <td> <s:property value="#u.age" /> </td> </tr> </s:iterator>
綜合以上的對比分析:遍歷方法各有長短,若不是多表聯接查詢、顯示錶格的列數已經固定,通常用實體類(UserEntity)迭代的方式。相反,顯示的數據表格行和列不肯定,此時用實體類(UserEntity)迭代的方式很難實現,只能用List<String>或List<List<String>>實現了。