在struts中有好多的标签方便开发,比如<logic:iterate>标签,可以很好的显示list的内容:
(一)对List的循环遍历:
1.先定义一个User类:
import java.io.Serializable; public final class User implements Serializable { private String name = null; private String password = null; public String getName () { return (this.name); } public void setName(String name) { this.name = name; } public String getPassword () { return (this. password); } public void setPassword (String password) { this. password = password; } }
2.建立jsp文件如:
<%@ page language="java" %> <%@ page import="example.*"%> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <% java.util.ArrayList list = new java.util.ArrayList(); User usera=new User(); usera.setName("white"); usera.setPassword("abcd"); list.add(usera); User userb=new User(); userb.setName("mary"); userb.setPassword("hijk"); list.add(userb); session.setAttribute("list", list); %> <html><body><table width="100%"> <logic:iterate id="a" name="list" type=" example.User "> <tr><td width="50%"> name: <bean:write name="a" property="name"/> 或者${a.name} 或者 ${a["name"]} <td/><td width="50%"> password: <bean:write name="a" property="password"/> </td></tr> </logic:iterate> </table></body></html>
"id"是在iterate循环的时候使用的内部循环变量,指代list中的一个实例,name指代的是在request、session、response等中的变量名
<bean:write name="a" property="name"/>标记是用来显示的,也可用EL表达式如:${a.name}或${a["name"]}
注:EL 提供“.“和“[ ]“两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用“[ ]“。例如:
${user.My-Name}应当改为${user["My-Name"] }
如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如:
${sessionScope.user[data]}中data 是一个变量
(二)对数组进行循环遍历:
<% String[] testArray={"str1","str2","str3"}; pageContext.setAttribute("test",testArray); %> <logic:iterate id="show" name="test"> <bean:write name="show"/> 或者${show} </logic:iterate>
(三)对集合Map的输出
如:有数据
HashMap<String,TestIterate> hm = new HashMap<String,TestIterate>(); hm.put("11",new TestIterate("aa",11)); hm.put("22",new TestIterate("bb",22)); hm.put("33",new TestIterate("cc",33)); hm.put("44",new TestIterate("dd",11)); hm.put("55",new TestIterate("ee",22)); hm.put("66",new TestIterate("ff",33)); request.setAttribute("hm",hm);
则页面输出可写成:
<logic:iterate id="h" name="hm" scope="request"> name:<bean:write name="h" property="value.name"/> age:<bean:write name="h" property="value.age"/><br/> </logic:iterate>
或者用EL写作:
<logic:iterate id="h" name="hm" scope="request" length="2" offset="1"> ${h["key"] } + ${h.value["name"] }<br/> </logic:iterate>
其中length属性指定了输出元素的个数,offset属性指定了从第几个元素开始输出,如此处为1,则表示从第二个元素开始输出
另外,该标记还有一个indexId属性,它指定一个变量存放当前集合中正被访问的元素的序号,如:
程序代码:
<logic:iterate id="h" name="hm" scope="request" indexId="number">
第${number}个:${h["key"] } + ${h.value["name"] }<br/>
</logic:iterate>
(四)嵌套遍历:
程序代码:
<% String[] colors={"red","green","blue"}; String[] countries1={"中国","美国","法国"}; String[] persons={"乔丹","布什","克林顿"}; ArrayList list2=new ArrayList(); list2.add(colors); list2.add(countries1); list2.add(persons); pageContext.setAttribute("list2",list2); %> <logic:iterate id="first" name="list2" indexId="numberfirst"> <bean:write name="numberfirst"/> <logic:iterate id="second" name="first"> <bean:write name="second"/> </logic:iterate> <br> </logic:iterate>
运行效果: