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

2024-05-12

根据我的研究,我看到了诸如<s:set>, <s:push>或者通过创建一个<s:bean>能够直接插入引用ActionContext or ValueStack。这让我很困惑,因为为什么不能有一个专门的地方来存储所有东西呢?可能只是把所有东西都放进去ActionContext因为它基本上充当ServletContext.

更令人困惑的是,如果您想访问ValueStack,您必须使用 Struts 标签,例如<s:property>但如果该值只是存储在ActionContext,你只需使用#valueOGNL 提供的前缀。

有人可以帮我解决这个问题吗?当我使用 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(使用前将#替换为@)

将对象直接存储到 ValueStack/ActionContext 的目的是什么? 的相关文章

随机推荐

  • 如何使用自定义布局跳转到 UICollectionView 中的任何 Cell?

    我的水平 UICollectionView 中有 40 个单元格和一个按钮 当我点击按钮时 我可以从 5 号单元格跳转到 10 号单元格 但是一旦我想要转到另一个单元格 例如从 5 到 25 它不起作用 而是变为 0 code func s
  • 猪参考

    我正在学习 Hadoop Pig 并且我总是坚持引用元素 请查找下面的示例 groupwordcount group chararray words bag of tokenTuples from line token chararray
  • 隐式方法组转换陷阱

    我想知道为什么给定代码的输出 在 LinqPad 中执行 void Main Compare1 Action Main Dump Compare2 Main Dump bool Compare1 Delegate x return x Ac
  • 泛型与接口的实际优势

    在这种情况下 使用泛型与接口的实际优势是什么 void MyMethod IFoo f void MyMethod
  • 推送通知需要很长时间才能到达

    我在适用于 iOS 和 Android 的 Adob e Air 应用程序中遇到推送通知的奇怪问题 我正在使用 Milkman Games 的 Easy Push ANE 以及 One Signal 服务 问题是通知确实会到达 但有时 随机
  • 如何在 couchdb 视图中调用另一个视图?

    我刚刚读完 couchdb 权威指南 一书 并开始摆弄设计文档 然而有一件事我不明白 到目前为止我看到的所有例子都有些线性 Example id 1 rev name first something blue child 2 id 2 re
  • 如何获取 Android 中临时文件的文件大小?

    如果我使用 openFileOutput 创建并写入临时文件 写入完成后如何获取文件大小 我希望这可以帮助你 File file new File selectedPath int file size Integer parseInt St
  • C++ 中的单例和抽象基类

    最近我遇到了关于实现 Singleton 但涉及抽象基类的问题 假设我们有这样的类层次结构 class IFoo it s ABC class Foo public IFoo 我们的单例类定义如下 template
  • 在 sed 命令和范围地址中使用不同的分隔符

    我在 shell 脚本中使用 sed 来编辑文件系统路径名 假设我想替换 foo bar with baz qux 然而 sed 的s 命令使用正斜杠 作为分隔符 如果我这样做 我会看到发出一条错误消息 例如 sed s foo bar b
  • Android LayerDrawable.setDrawableByLayerId 不适用于 HTC Sensation(和其他?)

    我正在使用 LayerDrawable 在底层图像 索引 0 上构建一系列热点 索引 1 热点是根据用户界面交互添加的 并且它们的位置是动态的 因此我以编程方式完成所有这些操作 而不是使用 XML 作为进一步 可能不相关 的细节 我使用 F
  • linkedin js 如何是有效的 javascript

    LinkedIn Javascript 集成是通过以下方式完成的 我不明白 这怎么是一个有效的javascript 为什么 api key 没有被引用 脚本标签的主体带有src永远不会被执行 但是 加载的脚本可以像访问任何其他元素的内容一样
  • 从流程图中获取数据系列的颜色

    在看到 stackoverflow 用户页面上很酷的新 声誉 选项卡后 我受到启发 开始尝试使用 Flot 图表库 我有一个包含数百个系列的折线图 在任何给定时间 这些系列中只有几个是可见的 我的数据系列分为几个 类别 我根据该类别分配数字
  • 迁移大型 Core Data 数据库崩溃

    我有一个将产品存储在核心数据文件中的应用程序 这些产品包括作为 可转换 数据的图像 现在我尝试使用轻量级迁移添加一些属性 当我使用一个小型数据库对其进行测试时 它运行良好 但当我使用一个接近 500 MB 的大型数据库时 应用程序通常会因内
  • 我们如何将数据从一个打开的表单传递到另一个打开的表单?

    winform中如何将数据从一个窗体传递到另一个打开的窗体 在 Windows 应用程序中 一个窗体打开另一个窗体 当我在父表单中输入一些数据时 这些数据将立即反映在另一个子表单中 这将如何发生 取决于你想要多花哨 最简单的方法就是直接调用
  • Kerberos 缓存票证

    我使用的是 Windows 7 64 位 我创建了一个简单的应用程序来对实现 PrivilegedAction 的类的 run 方法中的文件进行计数 以下是我的 jaas conf 文件 CountFiles com sun securit
  • 如何使用 django Rest 框架保存多对多字段对象

    我有博客 发布 标签三个模型 在博客模型中 我将字段 postedin 作为发布模型的外键 将 标签 作为标签模型的许多字段 模型 py class Posted models Model name models CharField Pos
  • 回显 unicode 字符

    我想通过运行bat 文件在cmd 中回显unicode 字符 我准备了一个简短的脚本 echo off SET message G p3 echo message pause 我怎样才能做到这一点 是否可以直接将这封信放入代码中 这样做 两
  • 避免集合已修改错误

    Issue 我有以下代码 foreach var ItemA in GenericListInstanceB ItemA MethodThatCouldRemoveAnyItemInGenericListInstanceB 显然我得到一个错
  • 尝试在空对象引用上调用虚拟方法“java.lang.String org.jsoup.nodes.Element.ownText()”

    我正在使用下面的代码来获取版本名称 from 应用商店通过使用 jsoup 我正在获取详细信息 但它引发了一些异常 我的代码是 public class ForceUpdateAsync extends AsyncTask
  • 将对象直接存储到 ValueStack/ActionContext 的目的是什么?

    根据我的研究 我看到了诸如