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