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方法:

,移除栈顶对象,查看root的pop方法

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可以不写,默认是迭代栈顶元素。

struts2 ValueStack的作用的更多相关文章

  1. struts2注解的作用

    Struts2注解 1 Struts2注解的作用 使用注解可以用来替换struts.xml配置文件!!! 2 导包 必须导入struts2-convention-plugin-2.3.15.jar包, ...

  2. struts2 ValueStack(值栈)解析

    Struts2一个重要点就是值栈. ValueStack,是用来存储一些在各个action,或者说是通过s标签.el表达式等给前台Jsp等页面展示的东西. ValueStack是一个接口,其内部接口非 ...

  3. Struts2基本包作用详解

    asm-3.3.jar作用:操作java字节码的类库包路径及主要类:未提供 asm-commons-3.3.jar作用:提供了基于事件的表现形式包路径及主要类:未提供 asm-tree-3.3.jar ...

  4. Struts2 ValueStack

    一.作用 可以作为一个数据中转站,用在前台和后台数据传递 二.生命周期 ValueStack的生命周期是随着request的创建而创建,随request的销毁而销毁. 三.结构 OgnlValueSt ...

  5. struts2 ValueStack的set方法与setValue方法的区别

    struts2中 ValueStack的set方法与setValue方法的区别呢? 示例代码: ActionContext.getContext().getValueStack().setValue( ...

  6. struts2 ValueStack详解,页面获取值el表达式、ognl表达式

    http://www.blogjava.net/max/archive/2007/04/28/114417.html 我想用的是el表达式! http://www.cnblogs.com/belief ...

  7. struts2 Advanced Learning

    catalog . 引言 . struts2的类型转换 . struts2的输入校验 . struts2的拦截器机制 . 使用struts2的Ajax支持 . struts2 OGNL表达式 . st ...

  8. Struts2的基础知识

    Struts2属于MVC框架 Struts2的优点: 1.侵入性低 2.提供了拦截器,可以利用拦截器进行AOP编程 3.提供了类型转换器 4.支持多种表示层技术:jsp,freeMarker,Vele ...

  9. Struts2框架基础概念总结

    一.struts2框架 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的 ...

随机推荐

  1. import 和 export -- ES6

    例子: 最后返回的结果是: { default: function fn2(){ }, foo2: 1, test3: { default: function fn3(){ }, foo3: 1 } ...

  2. 安卓架构 视频 Android 插件化架构设计

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha Android 插件化架构设计-Dream老师 自定义SDK =====

  3. Gym - 101620I Intrinsic Interval

    题面在这里! 首先一个非常重要的性质是,两个好的区间的交依然是好的区间. 有了这个性质,我们只要找到包含某个区间的右端点最小的好区间,然后就是这个区间的答案拉. 至于找右端点最小的好区间就是一个扫描线 ...

  4. FZU 2105 Digits Count(按位维护线段树)

    [题目链接] http://acm.fzu.edu.cn/problem.php?pid=2105 [题目大意] 给出一个序列,数字均小于16,为正数,每次区间操作可以使得 1. [l,r]区间and ...

  5. [NOI2017]整数

    [NOI2017]整数 题目大意: \(n(n\le10^6)\)次操作维护一个长度为\(30n\)的二进制整数\(x\),支持以下两种操作: 将这个整数加上\(a\cdot2^b(|a|\le10^ ...

  6. [百度之星2014资格赛] Disk Schedule 报告

    Disk Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  7. [转]Spring Security学习总结二

    原文链接: http://www.blogjava.net/redhatlinux/archive/2008/08/20/223148.html http://www.blogjava.net/red ...

  8. Codeforces Round #345 (Div. 2) E. Table Compression 并查集

    E. Table Compression 题目连接: http://www.codeforces.com/contest/651/problem/E Description Little Petya ...

  9. Linux下KVM的图形界面管理工具(virt-manager)(桌面版)

    背景: virt-manager是用于管理KVM虚拟环境的主要工具,virt-manager默认设置下需要使用root用户才能够使用该工具.当你想在KVM hypervisor服务器上托管虚拟机,由最 ...

  10. 移动应用安全开发指南(Android)--数据存储

    1.数据存储 概述 移动应用经常需要在某些场景下(比如用户登录)处理和用户或业务相关的敏感数据,有时候为满足某些业务需求,需要把这些敏感数据存储在本地,如果不对这些数据进行适当处理,就有可能存在敏感信 ...