根据我的研究,我看到了诸如<s:set>
, <s:push>
或者通过创建一个<s:bean>
能够直接插入引用ActionContext
or ValueStack
。这让我很困惑,因为为什么不能有一个专门的地方来存储所有东西呢?可能只是把所有东西都放进去ActionContext
因为它基本上充当ServletContext
.
更令人困惑的是,如果您想访问ValueStack
,您必须使用 Struts 标签,例如<s:property>
但如果该值只是存储在ActionContext
,你只需使用#value
OGNL 提供的前缀。
有人可以帮我解决这个问题吗?当我使用 Spring 时,我相信我需要的一切(请求、会话、applicationContext)都在 Spring 中ServletContext
要在我的网页上访问这些值,我可以使用$
访问上下文中任何内容的前缀。
每个地方都有其专用的存储空间,您可以将对象放置在其中以供以后使用/检索在某些调用上下文中运行。无论运行框架的上下文是什么,它都是相关联的。上下文是内部范围对象之间进行通信的方式,您可以使用 Java 或其他表达式语言 (EL)(如 OGNL)进行访问。
在 OGNL 中,动作上下文是 OGNL 上下文,值堆栈是根。
该框架将 OGNL 上下文设置为我们的 ActionContext,并且
值堆栈作为 OGNL 根对象。 (值栈是一组
几个物体,但对 OGNL 来说它似乎是一个物体。)
通过值堆栈,框架将其他对象放置在
ActionContext,包括代表应用程序、会话的 Maps,
和请求上下文。这些对象共存于ActionContext中,
与价值堆栈(我们的 OGNL 根)一起。
The ActionContext
is ThreadLocal
,因此您可以在一个线程中使用它。从该线程获取操作上下文/值堆栈的最佳方法是使用静态方法。
ActionContxt ctx = ActionContext.getContext();
ValueStack vs = ctx.getValueStack();
拦截器还有一个传递的参数,称为调用上下文,即操作上下文。
值堆栈也有自己的上下文,验证也有自己的上下文。所以,这些定义永远不会结束。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)