关于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>

猜你喜欢

转载自blog.csdn.net/qq_36791569/article/details/80587465