一、技术准备
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
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
2、在action,把需要显示的数据放进ActionContext中【本例使用List类型】
List<User> user = new ArrayList<User>();
ActionContext.getContext().put("userList", user );//船舶账号保存在ActionContext
3、页面使用struts2标签来显示
标签iterator使用value="userList" 获取从action得到的信息。
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();
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>