在Struts2中,动作类虽然继承ActionSupport类,可以直接写我们自己定义的方法,但是却不能像在Struts1中,对reques/response/application/HttpServletRequest等等一些Web元素进行操作,所以Struts2提供了RequestAware,SessionAware,ApplicationAware/ServletRequestAware....接口.
实现这些接口就可以对其进行想要的操作了.
package actions;
import java.util.Map;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import enetitys.Student;
public class StudentAction extends ActionSupport implements RequestAware,SessionAware,ApplicationAware,ModelDriven<Student>{
private Student student=new Student();
@Override
public Student getModel() {
return student;
}
//实现了RequestAware,SessionAware,ApplicationAware接口的类.
//谁调用执行这个action,谁就来初始化这些值
private Map<String,Object> request;
private Map<String,Object> session;
private Map<String,Object> application;
@Override
public void setApplication(Map<String, Object> application) {
this.application=application;
}
@Override
public void setRequest(Map<String, Object> request) {
this.request=request;
}
@Override
public void setSession(Map<String, Object> session) {
this.session=session;
}
public String delete(){
request.put("list", "把一个集合的数据删掉");
return "delete";
}
}
Action中实现RequestAware,SessionAware,ApplicationAware接口,
实现这些接口,都会有相对应的setXXX()方法.就是说谁来执行这个action中的相应方法,
谁就对这些个对象进行初始化(Spring中的注入).也就是Struts2为我们进行了初始化,所以这三个值都不需要自己初始化.
Delete.jsp页面中通过el表达式访问request中存放的key为list的值
<body>
${request.list}
</body>
页面访问的时候:
还有一种方法,但是需要依赖于Struts2.也就是上一篇日志中,访问栈中的Stack Context属性值,
只需要在action中定义相应名称的Map集合,在构造函数或一个什么方法中进行取值就行,在当前action的运行环境中取值:
private Map request;
private Map session;
private Map application;
public UserAction(){
request=(Map)ActionContext.getContext().get("request");
session=ActionContext.getContext().getSession();
application=ActionContext.getContext().getApplication();
}