struts标签 logic:iterate

<logic:iterate>是Logic标签库中最复杂的标签,也是用途最广的一个标签,它能够在一个循环中遍历数组、Collection、Enumeration、Iterator或Map中的所有元素。

1.遍历集合

<logic:iterate>的name属性指定需要进行遍历的集合对象,它每次从集合中检索出一个元素,然后把它放在page范围内,并以id属性指定的字符串来命名这个元素,例如:

<%

Vectoranimals=newVector();

animals.addElement("Dog");

animals.addElement("Cat");

animals.addElement("Bird");

animals.addElement("Chick");

request.setAttribute("Animals",animals);

%>

<logic:iterateid="element"name="Animals">

<bean:writename="element"/><br>

</logic:iterate>

以上代码先定义了一个Vector类型的集合变量Animals,它存放在request范围内.接下来<logic:iterate>标签在一个循环中遍历Animals集合(这个集合名就是在标签中的name属性的值)中所有元素,每次检索到一个元素,就把它命名为"element"(标签id属性的值),并存放在page范围内.

在<logic:iterate>中,还嵌套了一个<bean:write>标签,它用于输出每个元素的内容.以上代码的输出内容如下:

Dog

Cat

Bird

Chick

length属性指定需要遍历的元素的数目,如果没有设置length属性,就遍历集合中的所有元素.

offset属性指定开始遍历的起始位置,默认值为"0",表示从集合的第一个元素开始遍历.

indexId属性定义一个代表当前遍历元素序号的变量,这个变量被存放在page范围内,可以被标签主体的<bean:write>标签访问.例如:

<logic:iterate

id="element"//指定输出元素的名与<bean:write>中name属性一致

indexid="index"//遍历元素序号的变量,这个变量放在page范围内

name="Animals"//request中的集合名,从中取循环取出元素

offset="1"//从集合的第2条记录开始取数

length="2">//取出2个元素

<bean:writename="index"/>.//输出每个元素的序号,与indexId的属性一致

<bean:writename="element"/><br>//输出每个元素的内容,与id的属性一致

</logic:iterate>

2.遍历Map

<logic:iterate>标签还可以遍历HashMap中的元素,例如:

<%

HashMapmonths=newHashMap();

months.put("Jan","January");

months.put("Feb","February");

months.put("Mar","March");

request.setAttribute("month",months);

%>

<logic:iterateid="element"indexid="ind"name="months">

<bean:writename="ind"/>.//序号

<bean:writename="element"property="key"/>://键名

<bean:writename="element"property="value"/>//键值

</logic:iterate>

以上代码先定义一个名为"months"的HashMap,存放在request范围内.接下来在<logic:iterate>标签遍历months对象的每一个元素,每一个元素包含一对key/value.在<logic:iterate>标签主体中包含三个<bean:write>标签,分别输出每个元素的序号、key和value.以上代码的输出内容如下:

0.Mar:March

1.Feb:February

2.Jan:January

如果HashMap中的每个元素的value是集合对象,则可以采用嵌套的<logic:iterate>标签遍历集合中的所有对象,例如:

<%

HashMaph=newHashMap();

Stringvegetables[]={"pepper","cucumber"};

Stringfruits[]={"apple","orange","banana","cherry","watermelon"};

Stringflowers[]={"chrysanthemum","rose"};

Stringtrees[]={"willow"};

h.put("Vegetables",vegetables);

h.put("Fruits",fruits);

h.put("Flowers",flowers);

h.put("Trees",trees);

request.setAttribute("catalog",h);

%>

<logic:iterateid="element"//与<bean:write>中的name属性对应,输出内容

indexid="ind"//与<bean:write>中的name属性对应,输出序号

name="catelog">//指定输出元素的名称

<bean:writename="ind"/>.//输出序号

<bean:writename="element"//与<logic:iterate>中id属性对应

property="key"/>//集合中的键名

<logic:iterate

id="elementValue"//与<bean:write>中的name属性对应

name="element"//指定输出元素的名称

property="value"//集合中的键值

length="3"//取3个元素

offset="1">//从第2个位置取

-------<bean:writename="elementValue"/>

</logic:iterate>

</logic:iterate>

以上代码先定义一个名为"catelog"的HashMap,存放在request范围内,它的每个元素的value为字符串数组.

接下来外层的<logic:iterate>标签遍历HashMap中的所有元素,内层的<logic:iterate>标签访问每个元素的value属性,遍历value属性引用的字符串数组中的所有元素.

3.设置被遍历的变量

可以通过以下方式来设置需要遍历的变量

(1)设置name属性,name属性指定需要遍历的集合或Map,例如:

<logic:iterateid="element"name="Animals">

<bean:writename="element"/>

</logic:iterate>

(2)设置name属性和property属性,name属性指定一个JavaBean,property属性指定JavaBean的一个属性,这个属性为需要遍历的集合或Map,例如:

<logic:iterateid="element"indexid="ind"name="catelog">

<bean:writename="ind"/>

<bean:writename="element"property="key"/>

<logic:iterateid="elementValue"name="element"property="value"length="3"offset="1">

--------<bean:writename="elementValue"/>

</logic:iterate>

</logic:iterate>

(3)设置collection属性,collection属性指定一个运行时表达式,表达式的运算结果为需要遍历的集合或Map,例如:

<logic:iterateid="header"collection"<%=request.getHeaderNames()%>">

<bean:writename="header"/>

</logic:iterate>

4.读取JavaBean中的数据

(1)在Jsp页面中加入JavaBean如:

<jsp:useBeanid="articleClasses"class="com.GetArticleClasses"/>

上面这个JavaBean要求必须存在一个集合数组对象,如Vector,Collection,ArrayList等;在这个JavaBean的构造函数中,取得数据

库中的数据,并将其存入数组对象中。

(2)使用<logic:iterate>标签,取出JavaBean中存放的数组对象中的数据

<logic:iterate

id="aClasses"//id:给检索出的元素所命的名.

name="articleClasses"//name:JavaBean在页面中所设置的引用ID.

property="coll">//coll:JavaBean中的集合数组属性名称.

<tr>

<tdonMouseOver="this.bgColor='#FFFFFF'"onMouseOut="this.bgColor=''">

<html:linkpage="/articleListAction.do"

paramid="classId"

paramname="aClasses"

paramProperty="classId">

<bean:writename="aClasses"//与<logic:iterate>标签中的id属性相对应

property="className"/>//取出JavaBean中,存放在集合对象中的,对象的className属性值

</html:link>

</td>

</tr>

</logic:iterate>

(3)在JavaBean中的集合对象中存放实体对象的语句如下:

......

publicclassGetArticleClasses

{

//数据集合

privateCollectioncoll;

//返回数据集合

publicCollectiongetColl()

{

returncoll;

}

//构造函数,取出数据,存入集合中

publicGetArticleClasses()

{

coll=newArrayList();

try{

//数据库连接

Connectionconnection=DBConnection.getConnection();

if(connection!=null)

{

Statementstatement=connection.createStatement();

ResultSetresultset;

ArticleClassarticleclass;

resultset=statement.executeQuery("SELECT*FROMtableORDERBYid");

while(resultset.next())

{

articleclass=newArticleClass();

articleclass.setId(resultset.getInt("id"));

articleclass.setClassId(resultset.getString("class"));

articleclass.setClassName(resultset.getString("name"));

coll.add(articleclass))

}

resultset.close();

connection.close();

}else{

coll=null;

}

}catch(Exceptionexception){

coll=null;

}

}

}

相关推荐