ActionContext.getContext().getParameters():一个学员问题的解答
2012-11-12 15:12:05| 分类: 默认分类 | 标签:struts2 |举报 |字号大中小 订阅
这是一个学员发给我的问题,虽然有点怪,貌似明白他在思考的问题。
照图贴上,说明一下action是struts2 Action, 还没讲到struts2,他自己学的,不错。
从以上问题可以看出,他试图是想在Action中用Servlet中的request.getParament的方式来获取表单提交的值 (
或URL传递的参数)。
那问题就是:在Action中如何获取HttpServletRequest对象:
1、第一种方法:
ActionContext ctx = ActionContext.getContext();
Map request = (Map) ActionContext.getContext().get("request");
System.out.println(request.get("name"));
2、第二种方法:
HttpServletRequest req1 = ServletActionContext.getRequest();
String n = req1.getParameter("name");
System.out.println("n------"+n);
3、第三种方法:
HttpServletRequest req2 = (HttpServletRequest) ActionContext
.getContext()
.get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);
String sname = req2.getParameter("name");
System.out.println("req sname----" + sname);
以上第2、3种方法都可以获得HttpServletRequest,通过
getParameter方法获取值。
4、方法:Map<String, Object> params = ActionContext.getContext().getParameters();
这个方法我也没用过。在Action中获取request一般用第一种方法。
只能先做一些测试:
getParameters()可以通过map数据中key获得页面提交的参数名。理论上通过遍历key,可以获取value, (得到页面传来的值)。或者通过
params.get("name")得到name参数的值。但是输出看到的却是如,[Ljava.lang.String;@1e630208 。(一个String对象!)
通过测试我发现:
param.get("name")是一个String数组(为什么要返回数组不清楚,待查。可能的考虑是value应该保存一个object, 如果是一个对象,应该是有多个值的)。
那要用这种方法输出name的值,应该这样写: System.out.println(((String[])params.get("name"))[0]); 输出即为传过来的name对应的值。OK!
ActionContext.getContext().getParameters()具体待查,欢迎大家补充!
要取页面提交,传过来的值,还是用struts2提供的封装的方法。