struts2的s:iterator 可以遍历 数据栈里面的任何数组,集合等等 以下几个简单的demo:
s:iterator 标签有3个属性:
    value:被迭代的集合
    id   :指定集合里面的元素的id,可以和var属性替换, var 集合对象
    status :迭代元素的索引

实例:

外层list<实体>, 内层是hashtable<Long,List> ,外层的实体id 存放另一个list,注意:var 和 id  ,因为这个我被愚弄了2H,

	<s:iterator id="pro"  value="#request.proList" status="index">
<s:iterator var="item" value="#request.itemsTable.get(#pro.id)" status="index2">
${item.id}—${item.name}
</s:iterator>
</s:iterator>

具体说其用法:

1.数组或者list

<s:iterator value="{'1','2','3','4','5'}" id='n'>
<s:property value='n'/>A
</s:iterator>
打印结果为: 1A2A3A4A5A

2.索引用法

如果指定了status,每次的迭代数据都有IteratorStatus的实例,它有以下几个方法
int getCount()返回当前迭代了几个元素
int getIndex()返回当前元素索引
boolean isEven()当然的索引是否偶数
boolean isFirst()当前是否第一个元素
boolean isLast()
boolean isOdd()当前元素索引是否奇数
<s:iterator value="{'a','b','c'}" id='char' status='st'>
<s:if test="#st.Even">
现在的索引是奇数为:<s:property value='#st.index'/>
</s:if>
当前元素值:<s:property value='char'/>
</s:iterator>

  3.遍历map

value可以直接定义为:
value="#{"1":"a","2":"b"}"
每个元素以都好隔开。元素之间的key和value 冒号隔开
value也可以是数据栈里面的java.util.Map对象
遍历写法如下:
<s:iterator value="map" id="id" status="st">
key : <s:property value='key'/>
value:<s:property vlaue='value'/>
</s:iterator>
当然key 和value 都可以使java 的 Object

  4.遍历简单的list实体类, 后台使用 request.setAttrbute("stuList",stuList), list<Student>

<s:iterator value="#request.stuList" var="student" status="st">
<tr align="center">
<td><s:property value="#student.id" /> 或者 ${student.id}</td>
<td> <s:property value="#student.name" /></td>
<td> <s:date name="#student.birth" fomart="yyyy/MM/dd hh:mm:ss"/>
或者 ${student.birth} </td>
</tr>
</s:iterator>

 5.遍历两个list

第一个例子
List<AttrName> attrN {color,size,style}
List<AttrValue> attrV {red,20,gay}
这2个list的元素是一一对应的,一个attrN对应一个attrV
<s:iterator value="%{attrN }" id="id" status="status">
index is : <s:property value='status.index'/>
attrName is : <s:property value='id'/> or <s:property value='%{id}'/>
attrName is : <s:property value='%{attrV[#status.index]}'/> 第二个例子
<s:iterator value="data.datas" var="student" status="st">
<tr align="center">
<td><s:property value="#student.id" /></td>
<td> <s:property value="#student.name" /></td>
<td> <s:date value="#student.birth" fomart="yyyy/MM/dd hh:mm:ss"/></td>
<td><s:date value="classlist[#st.index].classname"/></td>
</tr>
</s:iterator>
</s:iterator>

6.总结

<html>
<body>
<ul>
<li>访问Map:<s:property value="strMap"/></li>
<li>访问Map中某个元素:
<s:property value="strMap.first"/> |
<s:property value="strMap['second']"/> |
<s:property value="strMap[\'third\']"/>
</li>
<li>访问Map中所有的key:<s:property value="strMap.keys"/></li>
<li>访问Map中所有的value:<s:property value="strMap.values"/></li>
<li>访问容器的大小:
<s:property value="strMap.size()"/> |
<s:property value="strMap.size"/>//这是map特别的地方
</li> <li>迭代循环取值,最简单
<s:iterator value="strMap" id="entry">
<s:property value="#entry"/>{
key: <s:property value="key"/>
value:<s:property value="value"/>}|
</s:iterator>
</li> <li>迭代循环取值
<s:iterator value="strMap.keySet()" id="key">
<s:property value="key"/>或<s:property value="#key"/>:
<s:if test="strMap[#key]!=null">
<s:property value="strMap.get(#key)"/> |
</s:if>
</s:iterator>
</li> <li>迭代循环取数组值
<s:iterator value="strMap" id="entry">
<s:property value="#entry"/>{
<s:property value="value[0]"/>
<s:property value="value[1]"/> |
<s:property value="value[2]"/> }
</s:iterator>
</li> <li>迭代循环取对象值,最直接:
<ul>
<s:iterator value="perMap" id="entry">
<li>
<s:property value="#entry"/> {
ID:<s:property value="value.ID"/>
Name:<s:property value="value.name"/>
Age:<s:property value="value.age"/> }|
</li>
</s:iterator>
</ul>
</li> <li>迭代循环取对象的属性值
<s:iterator value="perMap.keySet()" id="key">
<s:property value="#key"/>:
<s:iterator value="perMap.get(#key)">
<s:property value="ID"/>
<s:property value="name"/>
<s:property value="phone.name"/>
</s:iterator>|
</s:iterator>
</li> <li>稍复杂的迭代
<s:iterator value="perLstMap" id="entry">
<s:set name="total" value="#entry.value.size"/>
<s:iterator value="#entry.value" status="s">
<s:if test="#s.first">
<s:property value="#entry.key"/>:共${total}条
</s:if> {
<s:property value="ID"/> |
<s:property value="name"/> |
<s:property value="age"/>
};
</s:iterator>
</s:iterator>
</li>
</ul>
</body>
</html>

  

  

 

  

  

s:iterator的多层迭代的更多相关文章

  1. python生成器(generator)、迭代器(iterator)、可迭代对象(iterable)区别

    三者联系 迭代器(iterator)是一个更抽象的概念,任何对象,如果它的类有next方法(next python3)和__iter__方法返回自己本身,即为迭代器 通常生成器是通过调用一个或多个yi ...

  2. 【Python之路】特别篇--生成器(constructor)、迭代器(iterator)、可迭代对象(iterable)

    生成器(constructor) 生成器函数在Python中与迭代器协议的概念联系在一起.包含yield语句的函数会被特地编译成生成器 !!! 当函数被调用时,他们返回一个生成器对象,这个对象支持迭代 ...

  3. 341. Flatten Nested List Iterator展开多层数组

    [抄题]: Given a nested list of integers, implement an iterator to flatten it. Each element is either a ...

  4. 19迭代模式Iterator

    一.什么是迭代模式 Iterator模式也叫迭代模式,是行为模式之 一,它把对容器中包含的内部对象的访问委让给 外部类,使用Iterator(遍历)按顺序进行遍历 访问的设计模式. 二.不使用迭代模式 ...

  5. Java 迭代接口:Iterator、ListIterator 和 Spliterator

    1. 简介 当我们使用 for 或 while 循环来遍历一个集合的元素,Iterator 允许我们不用担心索引位置,甚至让我们不仅仅是遍历一个集合,同时还可以改变它.例如,你如果要删除循环中的元素, ...

  6. 迭代子(Iterator)模式

    迭代子模式又叫做游标模式.迭代子模式可以顺序地访问一个聚集中的元素而必暴露聚集的内部表象. 1.  聚集和Java聚集 多个对象在一起形成的总体形成聚集(Aggregate),聚集对象是能够包容一组对 ...

  7. Python中的可迭代Iterable和迭代器Iterator

    目录 Iterable可迭代对象 如何判断对象是否是可迭代对象Iterable Iterator迭代器 如何判断对象是否迭代器Iterator 将Iterable转换成Iterator Iterabl ...

  8. Java设计模式(二)——迭代模式

    迭代模式的基本定义:对于一组对象集合(数组.堆栈.列表或散列),用户无需关心它的底层实现而能够通过调用统一接口遍历当中的所有元素.由于jdk已经对常见的迭代模式实现了封装,本文直接提供Collecti ...

  9. Java 中Iterator 、Vector、ArrayList、List 使用深入剖析

    标签:Iterator Java List ArrayList Vector 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些 ...

随机推荐

  1. C++构造函数和拷贝构造函数详解

    构造函数.析构函数与赋值函数是每个类最基本的函数.它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险. 每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含 ...

  2. JAG Practice Contest for ACM-ICPC Asia Regional 2016B题【BFS】

    题意: 就是公主要逃跑,士兵要抓公主,问你能不能逃跑哇: 思路: 就是终点搞成起点,然后BFS一下就好了,最后枚举一下出口到公主的距离是不是<所有的到士兵的距离: #include <bi ...

  3. 小程序接收from表单数据(实例)

    html部分 <form bindsubmit='sub'> <view class="con"> <view class="con-nr& ...

  4. [Xcode 实际操作]二、视图与手势-(11)UITapGestureRecognizer手势之长按

    目录:[Swift]Xcode实际操作 本文将演示使用视图的长按手势,完成视图的交互功能. import UIKit class ViewController: UIViewController { ...

  5. Node.js 的回调模式

    我们都知道在javaScript中,如果在head标签里面引入script脚本,在打开web的时候,浏览器会先加载head中的信息,再加载body的信息: 如果head中有link标签,浏览器会开启一 ...

  6. Integrated Metabolomics and Lipidomics Analyses Reveal Metabolic Reprogramming in Human Glioma with IDH1 Mutation (文献分享一组-黄旭蕾)

    题目:Integrated Metabolomics and Lipidomics Analyses Reveal Metabolic Reprogramming in Human Glioma wi ...

  7. 慕课笔记-Java入门第三季

    1.自定义异常 自定义异常必须继承Exception类或者其子类. 2.字符串 String对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象. 多次创建的字符常量,Java编译程序只 ...

  8. C 语言实例 - 两个矩阵相加

    C 语言实例 - 两个矩阵相加 C 语言实例 C 语言实例 使用多维数组将两个矩阵相加. 实例 #include <stdio.h> int main(){ ][], b[][], sum ...

  9. rn-splash-screen 启动页 ios

    1.删除iOS工程文件夹下的 LaunchScreen.xib 文件 2. 3.  如果第4步不一样的样式,可以重新走这个图片的步骤就行 4.进入iOS工程的AppDelegate.m中做如下修改: ...

  10. 关于idea中使用lamb表达式报错:ambda expressions are not supported at this language level

    我使用的是jdk1.8,使用lamb表达式的时候,报错 ambda expressions are not supported at this language level, 后来,设置了 接着重启了 ...