一、技术准备
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>