首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将对象直接存储到ValueStack/ActionContext的目的是什么?

将对象直接存储到ValueStack/ActionContext的目的是什么?
EN

Stack Overflow用户
提问于 2015-02-27 07:18:42
回答 1查看 510关注 0票数 0

根据我所做的研究,我发现诸如<s:set><s:push>或通过创建<s:bean>之类的标签能够直接插入对ActionContextValueStack的引用。这让我很困惑,因为为什么你就不能有一个专门的地方来存储所有的东西呢?可能只是将所有内容都放在ActionContext中,因为它基本上充当了一个ServletContext

更令人困惑的是,如果您想访问ValueStack中的值,则必须使用<s:property>等Struts标记,但如果值只是存储在ActionContext中,则只需使用OGNL提供的#value前缀即可。

有人能帮我把这个弄清楚吗?当我使用Spring时,我相信我需要的一切(请求、会话、applicationContext)都在ServletContext中,要在我的网页上访问这些值,我可以只使用$前缀来访问上下文中的任何内容。

EN

回答 1

Stack Overflow用户

发布于 2015-02-27 22:14:17

每个地方都有自己的专用存储,您可以将您的对象放在这些存储中,以供以后在某个调用上下文中运行时使用/检索。无论运行什么上下文,框架都是关联的。上下文是在其中限定作用域的对象之间进行通信的方式,您可以使用Java或其他表达式语言(EL) (如OGNL )进行访问。

在OGNL中,操作上下文是OGNL上下文,值堆栈是根。

框架将OGNL上下文设置为我们的ActionContext,并将值栈设置为OGNL根对象。(值堆栈是几个对象的集合,但对于OGNL,它看起来像是一个对象。)除了值堆栈,框架还在ActionContext中放置了其他对象,包括表示应用程序、会话和请求上下文的Map。这些对象在ActionContext中与值堆栈(我们的OGNL根)并存。

ActionContextThreadLocal,所以您可以在一个线程中使用它。从这个线程获取操作上下文/值堆栈的最好方法是使用静态方法。

代码语言:javascript
复制
ActionContxt ctx = ActionContext.getContext();
ValueStack vs = ctx.getValueStack();

拦截器还传递了一个参数,称为调用上下文,这是操作上下文。

值堆栈也有自己的上下文,验证也有自己的上下文。因此,这些定义永远不会结束。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28754698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档