由于后台的Action和前台进行通讯的时候,不做处理会拿不到request、session、application所设的值,那么前后台之间的通讯就会受到影响;我们可以通过几种办法来
获取这些对象一遍使用来进行前后台之间的通讯。
1.取得Map类型的request、session、application:
A
1.在Action类中定义private Map request;private Map session;private Map application;
2.在其无参构造方法中将其初始化request=(Map)ActionContext.getContext().get("request");session=(Map)ActionContext.getContext().getSession();
request=(Map)ActionContext.getContext().getApplication();
然后在execute()或者是自己定义的方法中使用这些对象进行设值。
在前台可以通过<s:property value="#request:xx" /> <s:property value="#session:xx" /> <s:property value="#application:xx" /> 其中xx表示你自己在request、session、
application中设定的key。
B
1.让Action类实现RequestAware、SessionAware、ApplicationAware接口
2.在Action类中定义private Map<String,Object> request;private Map<String,Object> session;private Map<String,Object> application;
3.覆盖接口中的setRequest(Map<String,Object> request);setSession(Map<String,Object> session);setApplication(Map<String,Object> application);
这种方式最常用而且request很少去拿,Action中的成员变量会默认放到ValueStack中;application也基本不用;常用的就是session
2.取得真实类型的request、session、application:
A
1.在Action类中定义private HttpServletRequest request;private HttpSession session;private ServletContext application;
2.在构造方法中依次初始化:request = ServletActionContext.getRequest();session = request.getSession();application=session.getServletContext();
然后在execute()或者是自己定义的方法中使用这些对象进行设值。
B
1.Action类实现ServletRequestAware接口
2.在Action类中定义private HttpServletRequest request;private HttpSession session;private ServletContext application;
3.覆盖setServletRequest(HttpServletRequest request)方法
public void setServletRequest(HttpServletRequest request){
this.request = request;
this.session= request.getSession();
this.application = session.getServletContext();
}
然后在execute()或者是自己定义的方法中使用这些对象进行设值。
转自:http://blog.csdn.net/codeforjesus/article/details/8299616