Person.jsp (struts.xml中省略)

package com.mzy.entity;

public class Person {
private String name;
private String sex;
private int age; public Person() {
super();
}
public Person(String name, String sex, int age) {
super();
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", sex=" + sex + ", age=" + age + "]";
}
}

TagPersonAction.java

package com.mzy.tag;

import java.util.ArrayList;
import java.util.List; import com.mzy.entity.Person;
import com.opensymphony.xwork2.ActionSupport; public class TagPersonAction extends ActionSupport{ private static final long serialVersionUID = 7351425024147100121L; List<Person> persons; public List<Person> getPersons() {
return persons;
} public void setPersons(List<Person> persons) {
this.persons = persons;
} public String execute() { persons = new ArrayList<Person>();
String name = "aaa";
int age = 10;
String sex;
for (int i=0 ;i<10; i++) {
name = name + i;
age += i;
if (i%2 == 0) {
sex = "男";
} else {
sex = "女";
}
persons.add(new Person(name, sex, age));
} return SUCCESS;
}
}

jsp中:

<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>Person list start here!</title>
</head>
<body> <table cellspacing="0" border="1">
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<!--
注意:
这里不写var的时候,默认是压入值栈中的!但是压入 值栈的每一次的person
默认都是iterator本身去取,当然也可以使用property去取值,但是有个地方出错了!!!
Person已经是在外面了!!
所以不是person.name 而是 name
不是person.age 而是age
... ...
如果是第一层,直接取值;如果是JavaBean的对象,直接Ognl直接会使用getter方法取值! 在使用struts的iterator循环时,不写var只会压到值栈中,写了var会在ActionContext中也压一份!
值栈中的每次的person对象,会被iterator在每次循环结束之后,从值栈中pop出来,但是ActionContext
的话,就是每次覆盖前一次,最后会保留最后一次的Person对象在ActionContext中!
-->
<s:iterator value="persons" var="person" status="s">
<%-- <s:debug></s:debug> --%>
<%-- <s:property/> --%>
<%-- <s:property/> --%>
<%-- <s:if test='#person.sex=="男"'> --%>
<s:if test='sex=="男"'>
<tr <s:if test="#s.odd">style="background-color:pink"</s:if>>
<td>
<%-- <s:property value="#person.name"/> --%>
<s:property value="name"/>
</td>
<td>
<%-- <s:property value="#person.sex"/> --%>
<s:property value="sex"/>
</td>
<td>
<%-- <s:property value="#person.age"/> --%>
<s:property value="age"/>
</td>
</tr>
</s:if>
</s:iterator>
<%-- <s:debug></s:debug> --%>
</table> </body>
</html>

关于struts中Ognl和iterator配合再次理解的更多相关文章

  1. 在javascript中对于this指向的再次理解

    总所周知,function () {}函数体内的this对象指向的是调用该函数的对象,那么我们看一下这个例子 <script> var length = 3; function fn () ...

  2. Struts中的OGNL和EL表达式笔记

    Struts中的OGNL和EL表达式笔记 OGNL(Object-Graph Navigation Language),可以方便的操作对象属性的表达式语言. 1.#符号的用途 一般有三种方式: 1.1 ...

  3. 在Apache Struts中利用OGNL注入

    前言 本文简要介绍了Apache Struts的OGNL注入缺陷,文章中介绍使用简单的应用程序复现OGNL注入.深入研究针对公共漏洞,并理解这类漏洞. 内容 安装Apache Tomcat服务器(入门 ...

  4. Struts中整合的强大Ognl学习(一)

    测试使用了一个JavaBean的User,User中的Address单独封装再形成了一个JavaBean: 为了测试静态方法和静态变量调用,写了一个Util方法: 因为测试Ognl功能过多所以直接使用 ...

  5. Struts 2 OGNL

    1.什么是OGNL? 2.Struts 2 OGNL 表达式      ======================  华丽丽的分割线  ======================  1.什么是OG ...

  6. Struts2中OGNL

    什么是OGNL OGNL:Object Graph Navigation Language  对象导航图语言 开源项目,取代页面中Java脚本,简化数据访问 和EL同属于表达式语言,但功能更为强大 让 ...

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

    前面的话 用循环语句迭代数据时,必须要初始化一个变量来记录每一次迭代在数据集合中的位置,而在许多编程语言中,已经开始通过程序化的方式用迭代器对象返回迭代过程中集合的每一个元素 迭代器的使用可以极大地简 ...

  8. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

  9. struts中的数据校验

    1.struts中如何进行数据校验 在每一个Action类中,数据校验一般都写在业务方法中,比如login().register()等.struts提供了数据校验功能.每个继承自ActionSuppo ...

随机推荐

  1. react应用(基于react脚手架)

    使用create-react-app创建react应用 react脚手架 1) xxx脚手架: 用来帮助程序员快速创建一个基于xxx库的模板项目 a. 包含了所有需要的配置 b. 指定好了所有的依赖 ...

  2. ls仅列出当前目录下的所有目录

    ls -d */ -d仅列出目录本身,而不列出其中的内容 *通配符,所有的字符 /目录的标识

  3. springMVC-6-restful_CRUD

    1.大体框架 POJO层代码 Employee @Data public class Employee { private Integer id; private String lastName; p ...

  4. 【分布式锁】通过MySQL数据库的表来实现-V1

    一.来源 之所以要写这篇文章是因为想对自己当前的分布式知识做一个归纳.今天就先推出一篇MySQL实现的分布式锁,后续会继续推出其他版本的分布式锁,比如通过Zookeeper.Redis实现等. 二.正 ...

  5. 技术期刊 · 天光台高未百尺 | Uber 工程师的 JS 算法课;大数据时代的个人隐私;设计师的 Github;告别 PPT 工程师;从零开始实现的像素画

    蒲公英 · JELLY技术期刊 Vol.42 这是一个最好的时代,多样化的平台给了所有人成长发展的机会,各种需求和解决需求的人让人大开眼界:但这也并不是完美的时代,"前端还需要懂什么算法?& ...

  6. 多个filter如何决定调用顺序

    答案是:web-inf中的web.xml决定

  7. Spring Boot中使用时序数据库InfluxDB

    除了最常用的关系数据库和缓存之外,之前我们已经介绍了在Spring Boot中如何配置和使用MongoDB.LDAP这些存储的案例.接下来,我们继续介绍另一种特殊的数据库:时序数据库InfluxDB在 ...

  8. 实战 | Hive 数据倾斜问题定位排查及解决

    Hive 数据倾斜怎么发现,怎么定位,怎么解决 多数介绍数据倾斜的文章都是以大篇幅的理论为主,并没有给出具体的数据倾斜案例.当工作中遇到了倾斜问题,这些理论很难直接应用,导致我们面对倾斜时还是不知所措 ...

  9. 终拿字节Offer...动态规划复盘...

    大家好!我是 Johngo 呀! 和大家一起刷题不快不慢,没想到已经进行到了第二阶段,「动态规划」这部分题目很难,而且很不容易理解,目前我的题目做了一半,凭着之前对于「动态规划」的理解和最近做的题目做 ...

  10. 三、Linux部署MinIO分布式集群

    MinIO的官方网站非常详细,以下只是本人学习过程的整理 一.MinIO的基本概念 二.Windows安装与简单使用MinIO 三.Linux部署MinIO分布式集群 四.C#简单操作MinIO 一. ...