ActionContext.getContext request

WebWork框架详解
本文讨论了WebWork框架中ActionContext的正确使用方法,包括如何避免在构造函数中使用ActionContext.getContext(),以及如何通过ActionContext获取请求参数。同时解答了关于参数获取时出现的ClassCastException异常问题,并探讨了多种Aware接口的使用场景。

我看安子写的教程  里面拿context用的是

引用
static ThreadLocal actionContext = new ActionContextThreadLocal();


而且说

引用
不要在Action的构造函数里使用ActionContext.getContext(),因为这个时候ActionContext里的一些值也许没有设置,这时通过ActionContext取得的值也许是null。



可是我看WW给的例子里 全是第2种取法   而且根本就没有上面那个ActionContextThreadLocal类
我用的版本是2.2.4

另外  我

Java代码 复制代码
  1. ActionContext context = ActionContext.getContext();   
  2. Map map = context.getParameters();   
  3. String user = (String) map.get("username");  
		ActionContext context = ActionContext.getContext();
		Map map = context.getParameters();
		String user = (String) map.get("username");


居然报ClassCast   我看了一下 拿到的 username是

引用
class [Ljava.lang.String;


为什么 前面会有个 [L 的 ????

 

==============

教程里面提到 ActionContextThreadLocal 是为了讲解 ActionContext 的工作方式, 这个类是 ActionContext 的内部私有类, 你当然无法使用

Java代码 复制代码
  1. //~ Inner Classes //////////////////////////////////////////////////////////   
  2.   
  3. private static class ActionContextThreadLocal extends ThreadLocal {   
  4.     protected Object initialValue() {   
  5.         OgnlValueStack vs = new OgnlValueStack();   
  6.         return new ActionContext(vs.getContext());   
  7.     }   
  8. }  
    //~ Inner Classes //////////////////////////////////////////////////////////

    private static class ActionContextThreadLocal extends ThreadLocal {
        protected Object initialValue() {
            OgnlValueStack vs = new OgnlValueStack();
            return new ActionContext(vs.getContext());
        }
    }



不能在构造函数里调用 ActionContext.getContext() 的原因是此时 Action 实例还未创建完毕, 所有的 Interceptor 都没有执行, 所以会取到 null 值

 

===========

 

不是已经回复过了嘛?WebWork里面提供了SessionAware,ServletRequestAware,ParameterAware,无数Aware接口给你实现。不就可以操作这些对象了?

初学WebWork,请忘记Session,Request等对象,像ReadOnly老大所说。

 

 

===========

 

Norther 写道
我遇到的问题和LZ一模一样 。。。。原来是数组。。网上下的教程都把我误导了一遍。。。。请问为什么是数组呢。。数组中其他的元素是干什么的。。。还有我要在拦截器里得到paramenter 怎么实现接口?


因为从HttpServletRequest.getParameterMap()方法取出来的就是数组,Servlet规范不是这样的?
拦截器里直接用ActionContext把request拿出来,再取parameter不是很方便么,不知道还有什么方法可以把request注入Interceptor?

 

 

=============

 

教程里面不是说只是不能在构造函数里面是用ActionContext.getContext()这个静态方法。
在Command的execute方法里面就通过ActionContext.getContext().getSession获取。request一般都通过WW自动set到你对应的setter里面。
Aware方法我觉得不用为好,没什么太大意义。

 

 

http://www.iteye.com/topic/24410?page=3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值