近来做的一个项目用到了s:iterator 遍历struts的action类中的map,项目完成了,做一下总结,当做日后调用的笔吧。
1.下面,大家先看下stuts2中action处理代码:
Map<String,String> mapDetail = new HashMap<String,String>();//详细结果
mapDetail.put(cjxx_jjbh_find,doc.get(cjxx_jjbh_find));
mapDetail.put(cjxx_bjdhsj_find,doc.get(cjxx_bjdhsj_find));
mapDetail.put(cjxx_cjlbmc_find,doc.get(cjxx_cjlbmc_find));
mapDetail.put(cjxx_xzxl_find,doc.get(cjxx_xzxl_find));
mapDetail.put(cjxx_cjjg_find,doc.get(cjxx_cjjg_find));
mapDetail.put(cjxx_bjr_find,doc.get(cjxx_bjr_find));
mapDetail.put(cjxx_bjrzh_find,doc.get(cjxx_bjrzh_find));
mapDetail.put(cjxx_lxdh_find,doc.get(cjxx_lxdh_find));
mapDetail.put(cjxx_bjnr_find,doc.get(cjxx_bjnr_find));
mapDetail.put(cjxx_fxdd_find,doc.get(cjxx_fxdd_find));
mapDetail.put(cjxx_jjdwmc_find,doc.get(cjxx_jjdwmc_find));
2.jsp使用s:iterator遍历,优点代码简洁,缺点是在IE8中获取不了status.index参数,导致页面只显示了一列。如果对浏览器要求不高的可以选用。
<s:iterator value="mapDetail" id="entry"><s:set name="total" value="mapDetail.values.size()"/>
<s:iterator value="#entry.value" status="st">
<td width="120" bgcolor="#d8ebfa" class="cu"><s:property value="key"/></td>
<td width="150"><s:property value="value"/></td>
<s:if test="%{#st.index<#total}">
<s:if test="%{#st.index%2==0}">
</tr><tr>
</s:if>
</s:if>
<s:else>
<s:if test="%{(#st.index+1)%2==0}">
<td width='120'> </td><td width='150'> </td>
</s:if>
</s:else>
</s:iterator>
</s:iterator>
3.jsp中直接用java代码迭代,优点是稳定,不用考滤浏览器版本问题,缺点是代码相对于s:iterator多了几行代码。
页头导入<%@ page import="java.util.*"%>
处理代码部分:
<%
//数据集
Map<String,String> mapDetail = (Map<String,String>)request.getAttribute("mapDetail");
int num=mapDetail.size();
int nColumn=0;
for (Map.Entry<String, String> m : mapDetail.entrySet()) {
String dKey = "";
String dValue = "";
if(m.getKey()!=null)dKey = m.getKey();
if(m.getValue()!=null)dValue = m.getValue();
out.write("<td width='120'>"+dKey+"</td>");
out.write("<td width='150'>"+dValue+"</td>");
nColumn++;
if(nColumn < num) {
if (nColumn % 2 == 0) {
out.write("</tr><tr>");
}
} else {
if ((nColumn + 1) % 2 == 0) {
out.write("<td width='120'> </td><td width='150'> </td>");
}
}
}
%>