您的位置:首页 > 编程语言 > Java开发

关于Struts2访问web元素,实现requestAware接口

2017-03-12 16:08 357 查看
关于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从页面取值

这种方法的代码我就不演示了,和平时的取值没有什么区别
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: