我看安子写的教程 里面拿context用的是
而且说
可是我看WW给的例子里 全是第2种取法 而且根本就没有上面那个ActionContextThreadLocal类
我用的版本是2.2.4
另外 我
- ActionContext context = ActionContext.getContext();
- Map map = context.getParameters();
- String user = (String) map.get("username");
ActionContext context = ActionContext.getContext();
Map map = context.getParameters();
String user = (String) map.get("username");
居然报ClassCast 我看了一下 拿到的 username是
为什么 前面会有个 [L 的 ????
==============
教程里面提到 ActionContextThreadLocal 是为了讲解 ActionContext 的工作方式, 这个类是 ActionContext 的内部私有类, 你当然无法使用
- //~ Inner Classes //////////////////////////////////////////////////////////
- private static class ActionContextThreadLocal extends ThreadLocal {
- protected Object initialValue() {
- OgnlValueStack vs = new OgnlValueStack();
- return new ActionContext(vs.getContext());
- }
- }
//~ 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老大所说。
===========
因为从HttpServletRequest.getParameterMap()方法取出来的就是数组,Servlet规范不是这样的?
拦截器里直接用ActionContext把request拿出来,再取parameter不是很方便么,不知道还有什么方法可以把request注入Interceptor?
=============
教程里面不是说只是不能在构造函数里面是用ActionContext.getContext()这个静态方法。
在Command的execute方法里面就通过ActionContext.getContext().getSession获取。request一般都通过WW自动set到你对应的setter里面。
Aware方法我觉得不用为好,没什么太大意义。
WebWork框架详解
本文讨论了WebWork框架中ActionContext的正确使用方法,包括如何避免在构造函数中使用ActionContext.getContext(),以及如何通过ActionContext获取请求参数。同时解答了关于参数获取时出现的ClassCastException异常问题,并探讨了多种Aware接口的使用场景。
1740

被折叠的 条评论
为什么被折叠?



