iterator 标签
使用<s:iterator/>标签遍历列表
1,在Action中声明list对象 生成getset方法
package org.ccit.com.web.action;
import com.opensymphony.xwork2.ActionSupport;
import org.ccit.com.domain.Student;
import java.util.ArrayList;
import java.util.List;
/**
* @program: struts2_06
* @description
* @author: LIANG
* @create: 2021-02-04 19:35
**/
public class listAction extends ActionSupport {
private List<Student> stuList;
public List<Student> getStuList() {
return stuList;
}
public void setStuList(List<Student> stuList) {
this.stuList = stuList;
}
public String list(){
stuList= new ArrayList<Student>();
stuList.add(new Student("张三","100"));
stuList.add(new Student("李四","111"));
stuList.add(new Student("李四","111"));
stuList.add(new Student("李四","111"));
stuList.add(new Student("李四","111"));
stuList.add(new Student("李四","111"));
return SUCCESS;
}
}
value:OGNL表达式 列标名称
var代表为取出的对象 (每次取出的单个对象都会被存入ActionMap中 所以用#号取出数据)
status:
<%@ taglib prefix="s" uri="/struts-tags" %>
<%--
@program: struts2_05
@description
@author: LIANG
@create: 2021-01-26 18:03
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>学生列表</title>
</head>
<body>
<table border="1">
<tr>
<td>编号</td>
<td>姓名</td>
<td>密码</td>
</tr>
<s:iterator value="stuList" var="stu" status="st">
<tr>
<td>
<s:property value="#st.getIndex()"></s:property>
${st.getIndex()}
</td>
<td>
<s:property value="#stu.username"></s:property>
${stu.username}
</td>
<td>
<s:property value="#stu.password"></s:property>
${stu.password}
</td>
</tr>
</s:iterator>
</table>
<s:debug></s:debug>
</body>
</html>
注:使用EL表达式更简便
OGNL投影:添加过滤条件
.?#::选出符合条件的集合 如:stuList.{?#this.age>20}
.^# :选出第一个符合条件的
.$#:选出最后一个符合条件的
如:
<table border="1">
<tr>
<td>编号</td>
<td>姓名</td>
<td>年龄</td>
</tr>
<s:iterator value="stuList.{?#this.age>18}" var="stu" status="st">
<tr>
<td>
<s:property value="#st.getIndex()"></s:property>
</td>
<td>
<s:property value="#stu.username"></s:property>
</td>
<td>
<s:property value="#stu.age"></s:property>
</td>
</tr>
</s:iterator>
</table>
使用指定属性投影:不使用var属性
<table border="1">
<tr>
<td>年龄</td>
</tr>
<s:iterator value="stuList.{age}" var="stu" status="st">
<tr>
<td>
<s:property></s:property>
</td>
</tr>
</s:iterator>
</table>
#号用法
取contextMap中key时使用,例如<s:property value="#name" />
OGNL中创建Map对象时使用,例如:<s:radio list="#{‘male’:‘男’,‘female’:‘女’}" />
$号用法
在JSP中使用EL表达式时使用,例如$ {name}
在xml配置文件中,编写OGNL表达式时使用,例如文件下载时,文件名编码。struts.xml——>${@java.net.URLEncoder.encode(filename)}
%号用法
在struts2中,有些标签的value属性取值就是一个OGNL表达式,例如<s:property value=“OGNL Expression” />
还有一部分标签,value属性的取值就是普通字 符串,例如<s:textfield value=“username”/>,如果想把一个普通的字符串强制看成时OGNL,就需要使用%{}把字符串套起来。例如<s:textfield value="%{username}"/>。