`
newleague
  • 浏览: 1504485 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

ActionContext.getContext request

阅读更多

我看安子写的教程  里面拿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

分享到:
评论

相关推荐

    Struts2_TypeConvertion

    B.ActionContext ct= ActionContext.getContext() HttpServletRequest request= (HttpServletRequest)ct.get(ServletActionContext. HTTP_REQUEST ); 获得session对象: 在Struts2中底层的session都被封装成了...

    ActionContext在struts2.0中的详细应用

    ActionContext通常通过`ActionContext context = ActionContext.getContext();`来获取,这是因为ActionContext是基于ThreadLocal实现的。ThreadLocal是一种线程局部变量,每个线程都有自己的副本,避免了多线程环境...

    struts2访问application、session以及request等web资源的示例代码

    此外,Struts2还提供了Action上下文(ActionContext)作为便捷访问这些域的途径,通过`ActionContext.getContext()`获取当前请求的上下文对象,再从中获取所需的域对象。 在"struts2-web"这个压缩包文件中,可能...

    Struts2访问request,session,application的四种方式

    例如,你可以使用`ActionContext.getContext().get("key")`来获取请求或会话中的值,而`ActionContext.getContext().getValueStack()`则可以获取ValueStack,它是Struts2中处理模型驱动的一个关键部分。 2. **...

    struts2中request和session的获取

    HttpSession session = request.getSession(); ``` 这是最常见的获取Session对象的方式之一,直接调用`request`对象的`getSession()`方法即可。 2. **通过`ActionContext`获取**: ```java Map session = ...

    struts2中action如何获取jsp页面参数1.pdf

    由于ActionContext的实例在Action执行时才创建,因此不建议在Action的构造函数中使用`ActionContext.getContext()`,因为此时ActionContext可能尚未初始化。 总的来说,在Struts2中,Action类可以通过...

    java详解教程-structs 2

    ValueStack是Struts 2中的核心组件之一,它本质上是Request的一个属性,可以通过`request.getAttribute("struts.valueStack")`获取到。ValueStack的生命周期与Request相同,这意味着它在请求开始时被创建,并在请求...

    STRUTS2获得作用域、参数响应对象及三种符号说明

    HttpSession httpSession = request.getSession(); ``` #### 五、总结 Struts2提供了一套完整的机制来管理和访问不同作用域内的数据。通过实现特定的接口或使用`ActionContext`和`ServletActionContext`类,开发者...

    Struts2通过使用ActionContext类获取request和response对象

    String paramValue = request.getParameter("paramName"); ``` 而response对象则允许我们设置HTTP响应的状态码、头信息,以及输出内容: ```java response.setStatus(HttpServletResponse.SC_OK); response.set...

    Struts2的三种传值方式比较(附demo)

    开发者可以直接在Action中使用`ActionContext.getContext().getValueStack()`获取ValueStack,或者通过`ActionContext.getContext().get("request")`或`ActionContext.getContext().get("session")`获取请求和...

    struts2创建 request response session application

    ActionContext.getContext().getValueStack().push("myKey", "myValue"); return SUCCESS; } } ``` 然后在JSP页面上通过`OGNL`表达式获取: ```jsp ${myKey} ``` 2. 响应(Response)范围: 响应是服务器向...

    题目关于JAVA

    Object value = ActionContext.getContext().getSession().get("key"); // 设置session ActionContext.getContext().getSession().put("key", value); // 访问request value = ActionContext.getContext().get...

    struts2的API耦合与动态方法调用

    2. **ServletActionContext类**:这是ActionContext的一个扩展,提供了更方便的访问Servlet相关对象的方法,如`ServletActionContext.getRequest()`和`ServletActionContext.getResponse()`分别用于获取...

    struts2中范围对象的操作

    - **获取对象**: `Object obj = request.getAttribute("objName");` - **设置对象**: `request.setAttribute("objName", objName);` #### 2.2 应用程序范围(Application) 应用程序范围内的对象在整个Web应用程序...

    struts2使用request、response

    ActionContext context = ActionContext.getContext(); HttpServletRequest request = (HttpServletRequest) context.get(ServletActionContext.HTTP_REQUEST); HttpServletResponse response = ...

    Struts2学习教程之Action类如何访问WEB资源

    package com.request.test; import com.opensymphony.xwork2.ActionContext; import java.util.Map; public class ObjectAction { public String execute() { // 获取ActionContext ActionContext ...

    ActionContext介绍(在Struts2中)

    ActionContext context = ActionContext.getContext(); ``` ActionContext中的`getParameters()`方法可以用来获取请求参数,如示例代码所示,获取请求参数"username"的值: ```java Map, Object> params = context...

    struts2中获得request对象

    ActionContext context = ActionContext.getContext(); HttpServletRequest request = (HttpServletRequest) context.get(StrutsStatics.HTTP_REQUEST); ``` 这种方法简单直接,适用于任何Action方法。 2. **...

Global site tag (gtag.js) - Google Analytics