关于struts中Ognl和iterator配合再次理解
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配合再次理解的更多相关文章
- 在javascript中对于this指向的再次理解
总所周知,function () {}函数体内的this对象指向的是调用该函数的对象,那么我们看一下这个例子 <script> var length = 3; function fn () ...
- Struts中的OGNL和EL表达式笔记
Struts中的OGNL和EL表达式笔记 OGNL(Object-Graph Navigation Language),可以方便的操作对象属性的表达式语言. 1.#符号的用途 一般有三种方式: 1.1 ...
- 在Apache Struts中利用OGNL注入
前言 本文简要介绍了Apache Struts的OGNL注入缺陷,文章中介绍使用简单的应用程序复现OGNL注入.深入研究针对公共漏洞,并理解这类漏洞. 内容 安装Apache Tomcat服务器(入门 ...
- Struts中整合的强大Ognl学习(一)
测试使用了一个JavaBean的User,User中的Address单独封装再形成了一个JavaBean: 为了测试静态方法和静态变量调用,写了一个Util方法: 因为测试Ognl功能过多所以直接使用 ...
- Struts 2 OGNL
1.什么是OGNL? 2.Struts 2 OGNL 表达式 ====================== 华丽丽的分割线 ====================== 1.什么是OG ...
- Struts2中OGNL
什么是OGNL OGNL:Object Graph Navigation Language 对象导航图语言 开源项目,取代页面中Java脚本,简化数据访问 和EL同属于表达式语言,但功能更为强大 让 ...
- ES6中的迭代器(Iterator)和生成器(Generator)
前面的话 用循环语句迭代数据时,必须要初始化一个变量来记录每一次迭代在数据集合中的位置,而在许多编程语言中,已经开始通过程序化的方式用迭代器对象返回迭代过程中集合的每一个元素 迭代器的使用可以极大地简 ...
- 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合
不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...
- struts中的数据校验
1.struts中如何进行数据校验 在每一个Action类中,数据校验一般都写在业务方法中,比如login().register()等.struts提供了数据校验功能.每个继承自ActionSuppo ...
随机推荐
- GDB常用命令整理
(gdb) break xxx (gdb) b xxx 在源代码指定的某一行设置断点,其中 xxx 用于指定具体打断点的位置. (gdb) run (gdb) r 执行被调试的程序,其会自动在第一个断 ...
- 常见最基础的Dos命令.
打开cmd的方式. 1.+系统+命令提示符 2.Win+R 输入cmd 打开命令台 (推荐使用) 3.在任意的文件夹下按住SHIFT 加鼠标右键 在此处打开命令行窗口 4.资源管理器的地址栏前面加上 ...
- 在不受支持的 Mac 上安装 macOS Monterey 12
请注意,当前为 Beta 版,后续会及时更新. 请访问原文链接:https://sysin.org/blog/install-macos-12-on-unsupported-mac/,查看最新版.原创 ...
- 常用js代码积累
1,js判断进入可视区,参考(亲测不行):https://www.cnblogs.com/Marydon20170307/p/8830069.html 重点学习的话,可参考: js计算元素距离顶部的高 ...
- Leetcode12. 整数转罗马数字Leetcode18. 四数之和
> 简洁易懂讲清原理,讲不清你来打我~ 输入整数,输出对应的罗马字符串
参考 文章https://blog.csdn.net/weixin_41438728/article/details/110425174 影响版本 Spring Framework 5.0 to 5. ...