论坛首页 Java企业应用论坛

ActionContext的问题

浏览 5272 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-04-13  
我自己模仿ActionContext也实现了一个context
public class Context {
    static ThreadLocal context = new ContextThreadLocal();;
Map contextMap;

    public Context(Map contextMap); {
        this.contextMap = contextMap;
    }

    public static ActionContext getContext(); {
        Context context = (Context); actionContext.get();;

        if (context == null); {
            context = new ActionContext(new HashMap(););;
            setContext(context);;
        }

        return context;
    }

    public void setContextMap(Map contextMap); {
        getContext();.context = contextMap;
    }

    public Map getContextMap(); {
        return contextMap;
    }

    public void setInfo(Map info); {
        put("INFO", info);;
    }

    public Map getInfo(); {
        return (Map); get("INFO");;
    }

    public Object get(Object key); {
        return contextMap.get(key);;
    }

    public void put(Object key, Object value); {
        contextMap.put(key, value);;
    }
//~ Inner Classes //////////////////////////////////////////////////////////

    private static class ContextThreadLocal extends ThreadLocal {
        protected Object initialValue(); {

            return new Context(new HashMap(););;
        }
    }
}


当我按下按钮,在action的excute()中执行这行
Context.getContext();.getContextMap();.isEmpty();
返回位true。当然我在启动的时候就将info加到Context中了。

如果我在action中执行Context.getContext().getInfo(),跑出异常(情理之中)。可是如果我再回到原先按下按钮的那个页面(不清除浏览器记录),再次按下按钮。这个时候contextMap不为空了。

我不明白这个是什么原因。哪位指教下

谢谢
   发表时间:2005-04-14  
没有人帮下忙啊。

是不是我的问题描述的不清楚

我现在为了避免这个问题的发生。在action中加了Context属性。这样在调用的时候就有了,是通过component传过去的。对了我的这个action是有状态的。它是被我binding到component上了,比较特殊,应该算是component控制器。
0 请登录后投票
   发表时间:2005-04-14  
好像太复杂的样子, 偶这种webwork的dummy完全没有在实际项目中用过ActionContext和Component.

召唤WW达人......
0 请登录后投票
   发表时间:2005-04-14  
Readonly谦虚了,偶才是webwork的dummy。

我的需求是这个样子,要为每个客户保存好一些信息,以便客户只要与服务端保持着联系。那么就可以得到这些信息。我不想保存在某个对象中,然后将这个对象传来传去的。也不想保持在session中。因为觉得ActionContext可以做到。每个用户都会得到一个ActionContext.

不知我的那种情况是不是因为我对ThreadLocal的不了解导致的(瞎猜了)
0 请登录后投票
   发表时间:2005-04-14  
引用
因为觉得ActionContext可以做到。每个用户都会得到一个ActionContext.


ActionContext不是每个用户都会得到一个,而是每次请求都会得到一个新的。

不过还是没看明白你的代码的意思,全贴出来瞅瞅?
0 请登录后投票
   发表时间:2005-04-14  
引用
ActionContext不是每个用户都会得到一个,而是每次请求都会得到一个新的。

谢谢

我代码就不贴了,很丑。说一下吧
用户请求 --> Class A --> Class B- -> view
在A中组装好Context, B中要用Context没有问题.我在view上再次触发请求,按你说的,自然得不到原先的context.
0 请登录后投票
   发表时间:2005-04-14  
个人感觉这种情况放在session比较合适啊,为什么楼主不用session?有什么特殊理由嘛?你这样再做一次岂不是麻烦了。我感觉这种情况就像购物车一样,放入购物车,但是没有提交,跳转几次页面以后,还要保持原来的状态。
0 请登录后投票
   发表时间:2005-04-14  
引用
个人感觉这种情况放在session比较合适啊,为什么楼主不用session?有什么特殊理由嘛?你这样再做一次岂不是麻烦了。我感觉这种情况就像购物车一样,放入购物车,但是没有提交,跳转几次页面以后,还要保持原来的状态。

是啊,为什么不用session呢:)还是用吧,要一个没有ThreadLocal的Context类,整好后放在session中,要的时候拿过来用

多谢多谢
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics