struts2--使用自带标签自动添加列表

本文详细介绍了在Struts2框架中如何访问Web对象,通过使用ActionContext进行上下文管理来实现对session、参数等的访问。同时,通过示例展示了如何在迭代集合时使用Struts2的iterator标签,以及与JSTL forEach标签的对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、技术准备
1、Struts2的Action中访问web对象

Struts2的Action就是一个普通的POJO对象,它和Web对象request、response、session和application没有耦合在一起,这样便于单独测试Action。


访问这些web内部对象有2种方式:
(1)、直接访问Web对象
     Struts2框架提供org.apache.struts2.ServletActionContext辅助类来获得web对象。
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
HttpSession session = request.getSession();
ServletContext application = ServletActionContext.getServletContext();


(2)、Action访问ActionContext

     com.opensymphony.xwork2.ActionContext是一个Action执行的上下文,Action执行期间所用到的对象都保存在ActionContext中,例如session、参数等,并且ActionContext是一个局部线程变量,不用担心Action的线程安全。


ActionContext context = ActionContext.getContext();


     ActionContext中的常用方法如下:
Object get(Object key)使用key来查找当前ActionContext中的值
Map getApplication()返回一个Application范围的Map
static ActionContext getContext()获得当前线程的ActionContext实例
Map getParameters()Map类型的所有HttpServletRequest的参数
Map getSession()Map类型的HttpSession值
ValueStack getValueStack()返回一个ValueStack类型OGNL值栈
void put(Object key,Object value)向当前ActionContext存入值,等于在HttpServletRequest中加入值
void setApplication(Map application)设置application上下文
void setSession(Map session)设置session值,参数为Map实例


    注:这种方法使用的所有对象和Web对象没有直接联系。


2、struts2中iterator标签
注:别忘了加入<%@ taglib prefix="s" uri="/struts-tags" %>
iterator
描述:用于遍历集合(java.util.Collection)或枚举值(java.util.Iterator)。
参数:


名称 必需  默认类型 描述
status   String如果设置此参数,一个IteratorStatus的实例将会压入每个遍历的堆栈
value   Object/String要遍历的可枚举的(iteratable)数据源,或者将放入新列表(List)的对象
id   Object/String用来标识元素的id。在UI和表单中为HTML的id属性


如果指定了status,每次的迭代数据都有IteratorStatus的实例,它有以下几个方法
int getCount()返回当前迭代了几个元素
int getIndex()返回当前元素索引
boolean isEven()当然的索引是否偶数
boolean isFirst()当前是否第一个元素
boolean isLast()
boolean isOdd()当前元素索引是否奇数


实例
1、实体类User

package com.test.bean;

public class User {
	private String ID;
	private String name;
	
	public String getID() {
		return ID;
	}
	public void setID(String iD) {
		ID = iD;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}



2、在action,把需要显示的数据放进ActionContext中【本例使用List类型】
List<User> user = new ArrayList<User>();
        ActionContext.getContext().put("userList", user );//船舶账号保存在ActionContext


3、页面使用struts2标签来显示
              <s:iterator value="userList" status="status">               
                 <tr>
                    <td style="text-align:center">
			<s:property value="#status.index+1"/>
		   </td>
                   <td style="text-align:center">
                        <s:property value="ID"/>
                   </td> 
		   <td style="text-align:center">
                        <s:property value="name"/>
                   </td>    
                </tr>
              </s:iterator>

标签iterator使用value="userList" 获取从action得到的信息。


注:也可以使用jstl的<c:forEach>

	<c:forEach var="user" items="${userList}">
	  <tr>
	    <td>${user.ID }</td>
	    <td>${user.name }</td>
	  </tr>
	</c:forEach>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值