关于Struts2访问web元素的方法有很多种,这里只讲通过实现requestAware,
sessionAware接口来进行web元素访问时需要注意的一些事情
实现了requestAware和sessionAware接口,其Map集合中包含的信息
控制台打印的结果:
request:{struts.actionMapping=ActionMapping{name='login2', namespace='/access', method='null', extension='null', params=null, result=null}, r1=r1, struts.valueStack=com.opensymphony.xwork2.ognl.OgnlValueStack@7ec7ea1d, __cleanup_recursion_counter=1}
session:{s1=s1}
源码:
package com.strutsdemo.action;
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;
public class AccessAction2 extends ActionSupport
implements RequestAware , SessionAware,ApplicationAware {
private Map<String,Object> request;
private Map<String,Object> session;
private Map<String,Object> application;
@Override
public String execute() throws Exception {
request.put("r1", "r1");
session.put("s1", "s1");
application.put("a1", "a1");
System.out.println("request:" + request);
System.out.println("session:" + session);
return SUCCESS;
}
@Override
public void setApplication(Map<String, Object> arg0) {
application = arg0;
}
@Override
public void setSession(Map<String, Object> arg0) {
session = arg0;
}
@Override
public void setRequest(Map<String, Object> arg0) {
request = arg0;
}
}
从这个结果可以看出实现了requestAware接口,其Map集合中包含了一系列的和本次请求有关的信息,而实现了sessionAware接口,其Map集合中只会包含你所设定的值,那么这个信息有什么用呢?比如你在后台想通过Map设定好一个值,然后到前台使用js去取,那么你就需要将其转换问json格式,然后解析这个json对象,从中取出你需要的值,这时,你会发现在实现了requestAware接口的Map转json对象是转不了的,后台程序走到这里直接静悄悄地死掉了(因为不会报错),所以也就前台也就无法从json对象中获取到数据,但是,可以通过EL表达式或者Struts2的UI标签获取到Map中设定的值,只是不能通过js获取
解决办法
1.在给Map设定值时,先将其清空,然后再放值
request.clear();
request.put("r1", "r1");
2.将值保存在页面中,然后js从页面取值
这种方法的代码我就不演示了,和平时的取值没有什么区别