logic:Iterator
标签(以下简称
“
该标签
”
)是
Struts
里非常常用的一个标签,其作用在于循环显示给定容器对象中的值。
如此常用的标签,其源代码当然需要拿出来研究一下,以下列举几条研究成果:
1
、该标签内部使用
Collection
来表示给定的容器,所有的给定容器对象(如
ArrayList
,
Map
等)都会被其转化成为
Collection,Collection
实际就是
Map
和
List
的父类
。
2
、该标签自己维护循环索引,不用程序员管理索引
3
、该标签常见的几个属性如下:
name
、
property
、
scope
、
id
对应
Struts
给出的
Api
说明如下:
name:
包括要遍历
Collection
的
Jsp
页面的
bean
的名字(如果
property
没有被定义),或者是那些通过
getter
方法获得属性的
Jsp
中的
Bean
的名字,这些
getter
方法返回的是
Collection
(如果
property
定义了)。
property:
在
name
命名的
Jsp bean
中定义的属性的名字,通过
getter
方法返回一个
Collection
scope:
指示到哪里去寻找
name
为名字的
bean
,如果没有定义缺省为
"any scope"
id:
如果
Collection
非空的话,在每次遍历时候
Collection
中每个元素的名字。
其中除了
id
每个元素均为
Rt expr
,这儿的
rt expr
的意思就是
Run Time Expression
。明确的说就是,如果你对一个
Attribute
的
<rtexprvalue>
指定为
true
,你就可以在这样的属性中使用
<%=%>
之类的东东。这个配置文件在
tld
中。
只有
id
是必须要说明的。
关于
Api
说明的说明:
id
只是一个临时标识,在下面的
<bean:write
里面出现的
name
属性要和
id
一致才能打印出
<bean:write
的
property
,而此
property
就是在
iterator
中的属性。
举例说明
以下代码生成一个阶梯状表格
系统
资源
操作
soft3
res3
opt3
soft12
res12
opt1211
soft11
res11
opt1111
在此之前传来一个
request.getAttribute("userPurview")
,所以有在第一个
logic
中的
userPurview,
就是在这个
request
里面寻找
userPurview
返回的是一个
list
<table width="300" border="0">
<tr><td>
系统
</td>
<td>
资源
</td>
<td>
操作
</td>
</tr>
<!---
第一级迭代
-->
//request
中的数值为”
userPurview
”作用范围在
request
中
,
取的
ID
名为
targetSys
<logic:iterate id="targetSys" name="userPurview" scope="request">
//
这个
id
可以随便起名,但是要注意下文使用的一致性
<tr bgcolor="#cccccc"><td height="21" class="unnamed2">
<bean:write name="targetSys" property="cn"/>
//
此处
name
和上面
id
保持一致,
property
就是第一个
list
里面的元素
</td>
<td height="21" class="unnamed2"> </td>
<td height="21" class="unnamed3"> </td>
</tr>
<!---
第二级迭代
-->
<logic:iterate id="targetRes" name="targetSys" property="purviewResList">
<tr><td height="21" class="unnamed2"> </td><td
height="21" class="unnamed5">
<bean:write name="targetRes" property="cn"/>
</td>
<td
height="21" class="unnamed6"> </td>
</tr>
<!---
第三级迭代
-->
<logic:iterate id="targetOpr" name="targetRes" property="purviewOprList">
<tr><td height="21" class="unnamed4"> </td><td
height="21" class="unnamed4"> </td>
<td
height="21" class="redzi">
<bean:write name="targetOpr" property="cn"/></td>
</tr>
</logic:iterate>
</logic:iterate>
</logic:iterate>
</table>
结论:
多级迭代和单层差不多,唯一注意的就是
id
和
<bean:write
中的
name
的对应,上级
logic
的
id
与下级
logic
的
name
对应,并且取出来的要是个
Collection,name
和
id
不一定实际需要这个
bean
,都是虚拟的。
posted on 2006-09-26 11:51
Bruce 阅读(903)
评论(0) 编辑 收藏