Struts迭代器(iterator)遍历List常用的4种例子 - 冯世杰

【摘要】本文主要介绍及演示了Struts迭代器(iterator)遍历List常用的4种例子,基于MyEclipse开发环境,重点关注前后端代码的实现,给出后端java代码、前段struts标签代码,主要有如下4个例子:

1. 遍历List<String>

2. 遍历List<List<String>> 
3. 遍历UserEntity 
4. 遍历List<UserEntity>

例子的详细代码请参考附件1,给出两个4个例子的运行截图(如下图1): 
 
                   图1:遍历Listd的4个例子运行结果 
关键词:Struts标签,iterator迭代器,List<String>,List<List<String>>

1、遍历List<String>

(1)后台TestAction.java 部分代码:

1         // TODO 给list赋值2         if (list==null) {3             list=new ArrayList<String>();4             list.add("刘备");5             list.add("关羽");6             list.add("张飞");7             list.add("赵云");8         }

TODO 给list赋值

(2)前台jsp+s标签部分源代码:

 1                     <%--List<String>遍历--%> 2                     <table width="242" height="256" border="1" cellpadding="1" 3                         cellspacing="1"> 4                         <caption> 5                             List&ltString&gt遍历 6                         </caption> 7                         <tr> 8                             <%-- 9                         说明:<s:iterator id="别名" value="后台List变量名">10                               <s:if test="#别名!=null">11                             --%>12                             <s:iterator id="li" value="list">13                                 <td>14                                     <s:if test="#li!=null">15                                         <s:property />16                                     </s:if>17                                 </td>18                             </s:iterator>19                         </tr>20                     </table>

List遍历

注:遍历List<String>运行结果参考上图1(左上)

2、遍历List<List<String>>

(1)后台TestAction.java 部分代码:

 1         // TODO 给listList赋值(二维列表List) 2         if (listList==null) { 3             listList=new ArrayList<List<String>>(); 4             List<String> li=new ArrayList<String>(); 5             li.add("姓名"); 6             li.add("势力"); 7             li.add("职务"); 8             listList.add(li); 9             /*List为引用类型(以地址方式保存一维List对象),10             添加不同List到二维列表需再实例化    */        11             li=new ArrayList<String>();12             li.add("刘备");13             li.add("蜀");14             li.add("老大");15             listList.add(li);16             li=new ArrayList<String>();17             li.add("关羽");18             li.add("蜀");19             li.add("老2");20             listList.add(li);21             li=new ArrayList<String>();22             li.add("张飞");23             li.add("蜀");24             li.add("老3");25             listList.add(li);26             li=new ArrayList<String>();27             li.add("赵云");28             li.add("蜀");29             li.add("大将");30             listList.add(li);

TODO 给listList赋值(二维列表List)

(2)前台jsp+s标签部分源代码:

 1     <%--List<List<String>>遍历--%> 2                     <table width="242" height="256" border="1" cellpadding="1" 3                         cellspacing="1"> 4                         <caption> 5                             List&ltList&ltString&gt&gt遍历如下: 6                         </caption> 7                         <s:iterator value="#request.listList" status="st"> 8                             <tr> 9                                 <s:iterator value="#request.listList.get(#st.index)">10                                     <td valign="middle" align="center">11                                         <s:property />12                                     </td>13                                 </s:iterator>14                             </tr>15                         </s:iterator>16                     </table>

注:遍历List<List<String>>运行结果参考上图1(右上)

3、遍历UserEntity

(1)后台TestAction.java 部分代码:

1 // TODO 给UserEntity赋值2             if (userEntity==null) {3                 userEntity=new UserEntity("诸葛亮","男",37);4             }

TODO 给UserEntity赋值

(2)前台jsp+s标签部分源代码:

 1                     <%--UserEntity遍历如下:--%> 2                     <table width="242" height="256" border="1" cellpadding="1" 3                         cellspacing="1"> 4                         <caption> 5                             UserEntity遍历如下: 6                         </caption> 7                         <tr> 8                             <%--<td><s:property value="#变量名.属性名" /></td>--%> 9                             <td>10                                 <s:property value="userEntity.name" />11                             </td>12                             <td>13                                 <s:property value="userEntity.sex" />14                             </td>15                             <td>16                                 <s:property value="userEntity.age" />17                             </td>18                         </tr>19                     </table>

注:遍历UserEntity运行结果参考上图1(左下)

4、遍历List<UserEntity>

(1)后台TestAction.java 部分代码:

 1 // TODO 给List<UserEntity>赋值 2     if (users==null) { 3         users=new ArrayList<UserEntity> (); 4         UserEntity user=new UserEntity("张飞","男",18); 5         users.add(user); 6         user=new UserEntity("李斯","男",19); 7         users.add(user); 8         user=new UserEntity("王武","男",20); 9         users.add(user);10         user=new UserEntity("小乔","女",21);11         users.add(user);12     }

(2)前台jsp+s标签部分源代码:

 1 <%-- List<UserEntity>遍历如下:--%> 2                     <table width="242" height="256" border="1" cellpadding="1" 3                         cellspacing="1"> 4                         <caption> 5                             List&ltUserEntity&gt遍历如下: 6                         </caption> 7                         <tr> 8                             <th> 9                                 姓名10                             </th>11                             <th>12                                 性别13                             </th>14                             <th>15                                 年龄16                             </th>17                         </tr>18                         <s:iterator id="u" value="users">19                             <%--20         <s:iterator  id="別名"  value="要遍历的集合">21         users:对应后台Action类的List<UserEntity> users;22         --%>23                             <tr>24                                 <%--<td><s:property value="#別名.实体类属性名" /></td>--%>25                                 <td>26                                     <s:property value="#u.name" />27                                 </td>28                                 <td>29                                     <s:property value="#u.sex" />30                                 </td>31                                 <td>32                                     <s:property value="#u.age" />33                                 </td>34                             </tr>35                         </s:iterator>36                     </table>

注:遍历List<UserEntity>运行结果参考上图1(右下)

5、用法比较

(1)比较List<String>和UserEntity

它们遍历显示效果类似,但是细心的朋友会发现,它们主要有以下区别: 
  区别1: List<String>的遍历需要iterator迭代器如<s:iterator id="别名" value="后台List变量名">,且不需要value属性直接用<s:property />获取列表元素; 
  区别2: UserEntity刚相反,不需要iterator迭代器,但需要value属性<s:property value="#变量名.属性名" />来获取列表元素。

(2)比较List<List<String>>和List<UserEntity>

它们遍历显示效果也类似,它们也有以下区别: 
  区别1: List<List<String>>由于列表没有属性需要借助迭代器的属性status="st", 
  如:

<s:iterator value="#request.listList" status="st">
  <tr>
    <s:iterator value="#request.listList.get(#st.index)">
        <td valign="middle" align="center">
          <s:property />
        </td></s:iterator></tr></s:iterator>

区别2: List<UserEntity>则简单多,借用迭代器iterator的id、value属性,再用<s:property value="#別名.实体类属性名" />获取

  如:

<s:iterator id="u" value="users">
   <tr>
       <td>
         <s:property value="#u.name" />
       </td>
       <td>
         <s:property value="#u.sex" />
       </td>
       <td>
         <s:property value="#u.age" />
       </td>
   </tr></s:iterator>

  综合以上的对比分析: 遍历方法各有长短,若 不是多表联接查询 、显示表格的 列数已经固定 , 一般用实体类 (UserEntity)迭代的方式。相反,显示的 数据表格行和列不确定 ,此时用实体类(UserEntity)迭代的方式很难实现, 只能用 List<String>或List<List<String>>实现了。

时间: 2024-10-08 10:04:28

Struts迭代器(iterator)遍历List常用的4种例子 - 冯世杰的相关文章

struts标签iterator遍历非属性数据

·iterator标签遍历属性数据 比如:一个java类工单Business,它里面有一个属性businessLog public Class Business{ private List<BusinessLog> businessLog; //get  .set其他省略 } 那我们遍历的时候可以 <s:iterator value="businessLog" var="item" status="st"> <s:p

js数组遍历的常用的几种方法以及差异和性能优化

<script type="text/javascript"> /*对比: 1.map速度比foreach快 2.map会返回一个新数组,不对原数组产生影响,foreach不会产生新数组,foreach返回undefined 3.map因为返回数组所以可以链式操作,foreach不能 4, map里可以用return ,而foreach里用return不起作用,foreach不能用break,会直接报错*/ /*方法一:*/ var arr1 = [1, 2, 3, 4,

集合 Collection List Set 迭代器 Iterator 元素排序

1.Collection 接口与集合操作方法 /** * java.util.Collection 接口 * 集合框架 * 集合是用来保存一组元素的,不同的实现类实现了不同数据结构. * Collection是所有集合的顶级接口,规定了所有集合都必须具备的功能. * * 集合与数组一样,保存一组元素,但是操作元素的方法集合已经提供了. * * Collection下面有两个常见的子接口(分类) * java.util.List:线性表,特点是可以存放重复元素,并且有序. * java.util.

for循环和迭代器Iterator

迭代器模式:把访问逻辑从不同类型的集合类中抽取出来,从而避免向外部暴露集合的内部结构. Iterable接口:foreach遍历集合的优势在于代码更加的简洁,更不容易出错,不用关心下标的起始值和终止值.从本质上说,foreach其实就是在使用迭代器,在使用foreach遍历时对集合的结构进行修改,和在使用Iterator遍历时对集合结构进行修改本质上是一样的.同样会抛出异常,执行快速失败机制. 在使用Iterator的时候禁止对所遍历的容器进行改变其大小结构的操作.例如,在使用Iterator进

遍历Map集合的几种方法

遍历Map集合的几种方法 方法1:使用迭代器iterator遍历集合 HashMap<Integer, Long> map = new HashMap<Integer, Long>(); for (int i = 1; i <= 50; i++) { map.put(i, Math.round(3.14*i*i)); } // map转换为set集合 Set<Entry<Integer, Long>> set = map.entrySet(); //

C++迭代器/遍历器 iterator实现

1.原理 迭代器又称为遍历器,用于访问容器中的数据,迭代器旨在算法和容器之间搭建访问的桥梁,从而使算法和数据分离,不用关心数据具体的存储细节.具体的原理描述请参考以下两个博客: [1].C++迭代器 iterator [2].Iterator模式C++实现 迭代器的UML图: (来自:http://www.cnblogs.com/yc_sunniwell/archive/2010/06/25/1764934.html) 2.实现 根据以上的原理图,下面实现一个简单的迭代器. /* * 以下实现了

如何正确遍历删除List中的元素(普通for循环、增强for循环、迭代器iterator、removeIf+方法引用)

遍历删除List中符合条件的元素主要有以下几种方法: 普通for循环 增强for循环 foreach 迭代器iterator removeIf 和 方法引用 (一行代码搞定) 其中使用普通for循环容易造成遗漏元素的问题,增强for循环foreach会报java.util.ConcurrentModificationException并发修改异常. 所以推荐使用迭代器iterator,或者JDK1.8以上使用lambda表达式进行List的遍历删除元素操作. 以下是上述几种方法的具体分析: 1.

java基础知识5--集合类(Set,List,Map)和迭代器Iterator的使用

写的非常棒的一篇总结: http://blog.csdn.net/speedme/article/details/22398395#t1 下面主要看各个集合如何使用迭代器Iterator获取元素: 1.list使用迭代器Iterator public class testArrayList { public static void main(String args[]) { f1(); f2(); } public static void f1(){ List<String> strList

ES6中的迭代器(Iterator)和生成器(Generator)

前面的话 用循环语句迭代数据时,必须要初始化一个变量来记录每一次迭代在数据集合中的位置,而在许多编程语言中,已经开始通过程序化的方式用迭代器对象返回迭代过程中集合的每一个元素 迭代器的使用可以极大地简化数据操作,于是ES6也向JS中添加了这个迭代器特性.新的数组方法和新的集合类型(如Set集合与Map集合)都依赖迭代器的实现,这个新特性对于高效的数据处理而言是不可或缺的,在语言的其他特性中也都有迭代器的身影:新的for-of循环.展开运算符(...),甚至连异步编程都可以使用迭代器 本文将详细介