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中存放的keylist的值

<body>

    ${request.list}

</body>

頁面訪問的時候:

Struts2訪問Web元素(RequestAware,SessionAware,ApplicationAware) - 盡頭 - 深山憨娃

 

還有一種方法,但是需要依賴于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();

    }