`
wanxiaotao12
  • 浏览: 472360 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts2-Value Stack浅析

 
阅读更多

Value Stack的作用:

1.       可以作为一个数据中转站

2.       用于在前台-后台之间传递数据,最典型的做法就是struts2标签也ognl表达式的结合。我用得最多的就是数据回显。

Value Stack的生命周期:

         struts-default.xml文件中决定了在web容器启动时将会创建OgnlValueStackFactory对象,该对象实现了ValueStackFactory接口,负责ValueStack的创建工作。

         ValueStack的生命周期是随着request的创建而创建,随request的销毁而销毁。具体可见源代码:

         PrepareOperations类的createActionContext中有

至于清理工作,struts统一放在了PrepareOperations类的cleanupRequest方法中。

Value Stack结构:

         主要看OgnlValueStack类,此类实现了ValueStack接口。

OgnlValueStack中有两个至关重要的东西,

,简称“对象栈“Map

CompoundRoot:

CompoundRoot继承了ArrayList类,即是一个List集合,详见源码CompoundRoot类。

Context:context实际上是一个hashMap

其中_values就是平时使用的map栈,而_root只是对对象栈的引用。

使用Value Stack:

常用方法解析:

1.       push方法:

,再查看root的push方法

,顿时明白什么叫将对象压入栈顶了。

2.       set(String key,Object o)方法:

再看

也就是说第一次使用该方法时,struts会创建一个新的map

3.       pop方法:

,移除栈顶对象,查看rootpop方法

4.       peek方法

获取栈顶对象,做法与pop方法相同,只不过是get数据。

所以即可总结出使用方法:

1.       将数据放入值栈

将对象放入栈顶:

a)   ActionContext.getContext().getValueStack().push("aa);

b)   ActionContext.getContext().getValueStack().getRoot().add(0,"bb");

将数据放入map

ActionContext.getContext().getValueStack().set(“a”,”a”);

2.       从值栈中获取数据

a)         获取栈顶数据

                                       i.              ActionContext.getContext().getValueStack().peek();

                                     ii.              ActionContext.getContext().getValueStack().getRoot().get(0);

一般情况下,将对象放入栈顶之前先移除栈顶对象,这样可以节省内存空间。

重要:

1.       Interator标签当前迭代的对象在栈顶。

2.       Iterator标签的value可以不写,默认是迭代栈顶元素。

转:http://my.oschina.net/mlongbo/blog/88250

 

分享到:
评论

相关推荐

    struts2-core-2.0.11源码

    4. **值栈(Value Stack)**:Struts2的模型部分主要依赖于值栈,它是`org.apache.struts2.util`包的一部分,用于存储Action的属性和结果,方便视图层直接访问。 5. **结果类型(Result Types)**:`org.apache....

    struts2-core-2.0.12.jar

    ActionContext包含了当前请求的所有上下文信息,如Action实例、值栈(Value Stack)、会话、请求参数等。它是Struts2框架内部通信的重要桥梁。 **8. 国际化与本地化** Struts2支持多语言环境,通过资源包...

    Struts2 Value Stack Contents 中取值、多个集合数组

    在使用Struts2框架进行Web应用开发时,经常会遇到需要从Value Stack(值栈)中获取数据的场景,尤其是在表单验证中。Struts2的Value Stack是一种可以方便地在Action和JSP页面之间传递数据的机制。本文将详细介绍如何...

    struts2-core-2.3.7源码

    2. **ActionContext**: 包含了当前请求的所有上下文信息,如session、request、response、value stack等。 3. **ActionInvocation**: 表示Action执行的实例,包含了调用链以及拦截器链。 4. **...

    struts2-core-2.2.1 jar下载、源码下载 非常全面!!绝对可用!! 所需资源分最少。

    通过`struts2-core`的API文档,开发者可以快速查找和了解如何使用Struts2的各种功能,例如ActionSupport、ResultType、InterceptorStack等。这些文档通常包括类的描述、方法签名、参数说明和返回值,有助于提高开发...

    struts2-json

    Value Stack是Struts2的核心概念,它是一个存储Action属性的对象栈。当Action执行时,栈中的对象可以通过JSON插件转化为JSON格式。 4. **Action的返回值**: Action方法可以返回一个Map、List或其他集合对象,这些...

    redis-stack-server 7.2.0 安装包合集

    redis-stack-server-7.2.0-v9.arm64.snap redis-stack-server-7.2.0-v9.bionic.arm64.tar.gz redis-stack-server-7.2.0-v9.bionic.x86_64.tar.gz redis-stack-server-7.2.0-v9.bullseye.x86_64.tar.gz redis-stack-...

    struts-2.3.34-all.zip

    5. **模型驱动(ModelDriven)和值栈(Value Stack)**:模型驱动允许Action类与业务对象分离,值栈则是一个存储请求和Action属性的对象容器,方便在视图层直接访问。 6. **OGNL(Object-Graph Navigation Language...

    Z-Stack 3.0.2-.7z.zip_Z-STACK 3.0.2_Z-STACK-3.0.2_z-stack 3_z-st

    2. **安全性增强**:随着物联网安全问题日益凸显,Z-Stack 3.0.2 提供了更强的安全特性,包括AES-128加密、认证机制以及安全密钥管理,保护网络免受非法访问和数据篡改。 3. **API 更新**:开发者接口(API)进行了...

    struts2-core-2.0.11.jar

    8. **模型驱动(ModelDriven)和拦截器链(Interceptor Stack)**:Struts2支持模型驱动方式,通过一个通用的Model接口,可以简化Action的编写。同时,拦截器链允许开发者自定义拦截器顺序,实现复杂逻辑。 9. **...

    struts2-2.3.15 jar包

    Struts2是一个强大的MVC(模型-视图-控制器)框架,它在Java Web开发领域中扮演着重要的角色。此“struts2-2.3.15 jar包”是Struts2框架的一个版本,主要用于搭建开发环境。下面将详细讨论Struts2的核心概念、特性...

    Struts2.3.4-all

    4. **Value Stack**:值栈是Struts2用来存储模型对象的地方,它使得视图可以直接访问Action中的属性,而无需通过getter和setter方法。 5. **Tiles**:Struts2集成Tiles框架,允许开发者创建可重用的页面布局,提高...

    Struts2-2.2.1

    5. **值栈(Value Stack)**:值栈是Struts2中的数据存储结构,它管理Action的属性值,可以方便地将数据传递给视图层。 6. **结果类型(Result Types)**:Struts2支持多种结果类型,如JSP、FreeMarker、 Velocity...

    struts-2.3.16-all

    4. **Value Stack**:这是一个数据容器,用于存储Action与视图之间的数据。 5. **Freemarker/Velocity**:Struts 2支持多种模板技术,如Freemarker和Velocity,用于生成动态HTML页面。 6. **Struts Plugins**:框架...

    struts2-xwork-ognl的源文件(jar包)

    XWork的ActionContext对象持有与当前请求相关的所有上下文信息,如值栈(Value Stack)和Action实例。 `ognl-3.0.6-sources.jar` 包含了OGNL的源代码,这是一门强大的表达式语言,用于在Struts2中访问和操作对象图...

    基于kube-prometheus-stack部署监控K8S告警系统资源合集

    2. 添加 Prometheus 社区仓库:Helm 图表通常存储在仓库中,需要添加 `prometheus-community` 仓库以便获取 `kube-prometheus-stack`。 3. 安装 `kube-prometheus-stack`:通过 Helm 使用预定义的配置参数安装监控...

    struts2-2.2.1包

    - **Value Stack**:值栈是一个对象容器,用于存储Action实例和展示层数据,方便视图层获取。 2. **配置**: - **struts.xml**:框架的主要配置文件,定义了Action、Result、Interceptor栈等。 - **package**:...

    struts2-2.5.14

    - **Value Stack**:存储Action实例和Action上下文,使得数据在不同组件间共享。 3. **配置文件**: - `struts-default.xml`:包含默认的配置,定义了一些通用的Interceptor和Result类型。 - `struts-plugin.xml...

    struts-xwork-core源码

    6. **Value Stack**: - 值栈是Struts2的一个重要概念,它是一个对象栈,用于存储Action实例、ActionContext和结果。视图可以直接从值栈中获取数据,简化了视图和模型之间的交互。 7. **OGNL(Object-Graph ...

    ndk-stack调试 cocos2d-x

    ndk-stack 调试 cocos2d-x ndk-stack 是一个强大的命令行调试工具,用于调试 Native 代码,especially for Android 平台的.so 库文件。下面我们来详细了解 ndk-stack 在 cocos2d-x 中的应用。 什么是 ndk-stack? ...

Global site tag (gtag.js) - Google Analytics