之前写在GitHub Pages上,发表于2017-01-18
前言
由于常用Struts迭代器(Iterator)遍历List,而时间久了难免会忘,这里总结一下以备后观。为便于理解将给出后端Java、前端JSP(Struts标签)的实际代码。
遍历类型
- List<String>
- List<List<String>>
- Entity
- List<Entity>
代码演示
遍历List<String>
Java部分
if(list== null) {
list= new ArrayList<String>();
list.add("宋远桥");
list.add("俞莲舟");
list.add("俞岱岩");
list.add("张松溪");
list.add("张翠山");
list.add("殷梨亭");
list.add("莫声谷");
}
JSP(Struts标签)部分
<table border="1" cellpadding="1" cellspacing="1">
<caption>武当七侠</caption>
<tr>
<!-- <s:property id="别名" value="后台List对象名" /> -->
<!-- <s:if test="#别名!= null"> -->
<s:iterator id="l" value="list">
<td>
<s:if test="#l!= null">
<s:property />
</s:if>
</td>
</s:iterator>
</tr>
</table>
效果图
暂略
遍历List<List<String>>
Java部分
List<List<String>> listList= null;
List<String> list= null;
if(listList== null) {
listList= new ArrayList<List<List<String>>();
list= new ArrayList<String>();
list.add("姓名");
list.add("别名");
list.add("武学");
list.add("成就");
listList.add(list);
list= new ArrayList<String>();
list.add("宋远桥");
list.add("宋大侠");
list.add("绵掌");
list.add("首位被前任罢免的掌门弟子");
listList.add(list);
list= new ArrayList<String>();
list.add("俞莲舟");
list.add("俞二侠");
list.add("虎爪绝户手");
list.add("七侠武功之最;武当派第二代掌门;太极拳传人");
listList.add(list);
list= new ArrayList<String>();
list.add("俞岱岩");
list.add("俞三侠");
list.add("玄虚刀法");
list.add("短期持有屠龙刀");
listList.add(list);
list= new ArrayList<String>();
list.add("张松溪");
list.add("无");
list.add("内家拳");
list.add("内家拳传人");
listList.add(list);
list= new ArrayList<String>();
list.add("张翠山");
list.add("铁画银钩;张五侠");
list.add("二十四字倚天屠龙功");
list.add("武当七侠阵亡第一人");
listList.add(list);
list= new ArrayList<String>();
list.add("殷梨亭");
list.add("殷六侠");
list.add("天地同寿剑法");
list.add("剑术为七侠最精");
listList.add(list);
list= new ArrayList<String>();
list.add("莫声谷");
list.add("无");
list.add("绕指柔剑");
list.add("死于叛徒师侄宋青书");
listList.add(list);
}
JSP(Struts标签)部分
<table border="1" cellpadding="1" cellspacing="1">
<caption>武当七侠简介</caption>
<s:iterator id="ll" value="#request.listList" status="stat">
<tr>
<s:if test="#ll!= null">
<s:iterator id="l" value="#request.listList.get(#stat.index)">
<td valign="middle" align="center">
<s:if test="#l!= null">
<s:property />
</s:if>
</td>
</s:iterator>
</s:if>
</tr>
</s:iterator>
</table>
效果图
暂略
遍历Entity
Java部分
DaXia daxia= null;
if(daxia== null) {
daxia= new DaXia("张无忌", 21, "乾坤大挪移", "明教第34任教主");
}
JSP(Struts标签)部分
<table border="1" cellpadding="1" cellspacing="1">
<caption>张无忌简介</caption>
<tr>
<!-- <s:property value="#对象名.属性名" /> -->
<td>
<s:property value="daxia.name" />
</td>
<td>
<s:property value="daxia.age" />
</td>
<td>
<s:property value="daxia.kungfu" />
</td>
<td>
<s:property value="daxia.achievement" />
</td>
</tr>
</table>
效果图
暂略
遍历List<Entity>
Java部分
List<DaXia> list= null;
DaXia daxia= null;
if(list== null) {
list= new ArrayList<DaXia>();
daxia= new DaXia("令狐冲", 31, "独孤九剑", "仗剑天涯肆意人生");
list.add(daxia);
daxia= new DaXia("张无忌", 21, "乾坤大挪移", "明教第34任教主");
list.add(daxia);
daxia= new DaXia("萧峰", 45, "降龙十八掌", "侠之大者为国为民");
list.add(daxia);
daxia= new DaXia("扫地僧", 99, "易筋经", "宠辱不惊武至化境深明医理重剑无锋");
list.add(daxia);
}
JSP(Struts标签)部分
<table border="1" cellpadding="1" cellspacing="1">
<thead>
<caption>数名大侠简介</caption>
<th>姓名</th>
<th>年龄</th>
<th>绝学</th>
<th>成就</th>
</thead>
<tbody>
<s:iterator id="dx" value="#request.listList" status="stat">
<tr>
<td><s:property value="#dx.name" /></td>
<td><s:property value="#dx.age" /></td>
<td><s:property value="#dx.kungfu" /></td>
<td><s:property value="#dx.achievement" /></td>
</tr>
</s:iterator>
</tbody>
</table>
效果图
暂略
比较
比较List<String>和Entity
1.迭代器语法规则不同
遍历List<String>
所需迭代器为<s:iterator value="后台List对象名">
遍历Entity不需迭代器
2.获取元素语法规则不同
遍历List<String>
获取元素方式为<s:property />
遍历Entity
获取元素方式为<s:property value="#对象名.属性名" />
比较List<List<String>>和List<Entity>
1.迭代器语法规则不同
遍历List<List<String>>
由于List没有属性,取内层值需要借助迭代器的属性status
以依次取内层值
遍历List<Entity>
直接像静态变量一样对象打点访问(属性)即可
2.遍历层数不同
遍历List<List<String>>
需要双层两个Iterator遍历
遍历List<Entity>
外层使用遍历器,内层打点访问即可
总结
遍历方式各有长短,若非多表连接查询、所需显示表格的列数已经固定,一般用实体类(Entity)迭代。相反,所需显示表格的行数不确定或行列数均不确定时,再用实体类迭代将很无法实现,只能用List<String>
或List<List<String>>
迭代。