ActionContext_、ValueStack、Stack_Context关系

简介: 看源码你就会发现,ActionContext这个类中有一个变量: Map context, 实际上调用ActionContext的put,get就相当于调用context的相就方法,你在页面上通过获取的就相当于调用context.get("request"),context.get("attr"),而你通过ac.put("list", List)也只能通过ac.get("list")获得。

看源码你就会发现,ActionContext这个类中有一个变量:

 Map context,

实际上调用ActionContextput,get就相当于调用context的相就方法,你在页面上通过获取的就相当于调用context.get("request"),context.get("attr"),而你通过ac.put("list", List)也只能通过ac.get("list")获得。

ActionContext.getValueStack()相当于调用context.get(OgnlValueStack.VALUE_STACK)所获取的与通过ActionContext.get("request")获取的是不一样的东西

 

===============================================================================

ActionContext

一次Action调用都会创建一个ActionContext

调用:ActionContext context = ActionContext.getContext()

 

ValueStack

OGNL框架实现

可以把它简单的看作一个List

 

 

Stack Object:放入stack中的对象,一般是action

Stack Contextmap):stack上下文,它包含一些列对象,包括request/session/attr/application map等。

EL:存取对象的任意属性,调用对象的方法,遍历整个对象结构图

 

======================================================================================

ActionContextAction上下文

可以得到request session application

ValueStack是值栈存放表单中的值

Stack Context 栈上下文也是用来存值的

 

=======================================================================================

你可以通过在页面中添加<s:debug/>标签察看ValueStackStack Context中有哪些具体的内容。ValueStack里面的东西先入后出,很多没有id的元素使用完之后就退栈了。

StackContext提供了一些命名对象,这些命名对象与根对象无关,访问这些对象需要使用#前缀指名。比如这里面存在:parameters对象,request对象, session对象,application对象等等。

 

======================================================================================

value stack contents ognl 值栈

stack context action上下文

 

action上下文是一个map对象,通过#key获得对象内容,在#request又可以得到值栈,值栈里存储的是一些action里的变量

于是获得action变量内容有三种方式

1,从值栈中直接获得

<s:property value="type"/>

${type }

2,从action上下文获得值栈的属性

<s:property value="#request['type']"/>或者<s:property value="#request.type"/>

 

======================================================================================

1) ValueStack可以用 request.getAttribute("struts.valueStack")取得的一个 com.opensymphony.xwork2.util.OgnlValueStack实例,它实现为一个栈,有 peek()pop()push(obj)方法。

 

   2) Stack Context是在前面的 ValueStack的上下中的一个 java.util.Stack实例:

  //stack ValueStack实例,COMPONENT_STACK="__component_stack"

  // org.apache.struts2.components.Component.getComponentStack()中的代码

  Stack componentStack = (Stack) stack.getContext().get(COMPONENT_STACK);

目录
相关文章
电脑上扫码支付功能用法
  PC扫码支付的方式,支持前置模式和跳转模式。  前置模式是将二维码前置到商户的订单确认页的模式。需要商户在自己的页面中以 iframe 方式请求支付宝页面。具体分为以下几种:  0:订单码-简约前置模式,对应 iframe 宽度不能小于600px,高度不能小于300px; qr_pay...
3095 12
|
存储 算法 NoSQL
【云计算与大数据技术】Bloom Filter、LSM树、Merkle哈希树、Cuckoo哈希等数据结构的讲解(图文解释 超详细)
【云计算与大数据技术】Bloom Filter、LSM树、Merkle哈希树、Cuckoo哈希等数据结构的讲解(图文解释 超详细)
184 0
|
网络协议 Ubuntu NoSQL
docker 镜像和容器
docker 镜像 查找镜像 search 我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/ 我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个 httpd 的镜像来作为我们的 web 服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。 搜索镜像
612 0
|
SQL 关系型数据库 数据库
|
11天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
10天前
|
存储 人工智能 搜索推荐
终身学习型智能体
当前人工智能前沿研究的一个重要方向:构建能够自主学习、调用工具、积累经验的小型智能体(Agent)。 我们可以称这种系统为“终身学习型智能体”或“自适应认知代理”。它的设计理念就是: 不靠庞大的内置知识取胜,而是依靠高效的推理能力 + 动态获取知识的能力 + 经验积累机制。
356 131
|
10天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
443 131
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
4天前
|
存储 安全 前端开发
如何将加密和解密函数应用到实际项目中?
如何将加密和解密函数应用到实际项目中?
206 138