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. BZOJ 1877 [SDOI2009]晨跑(多条不交叉最短路)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1877 [题目大意] 找出最多有几条点不重复的从1到N的路,并且要求在满足这个条件的情况 ...

  2. bzoj 4430: [Nwerc2015]Guessing Camels赌骆驼

    4430: [Nwerc2015]Guessing Camels赌骆 Description Jaap, Jan, and Thijs are on a trip to the desert afte ...

  3. PHP与Web页面的交互

    1.form表单默认情况下提交数据的方式为get方式. 2.PHP脚本用来处理表单数据的预定义变量是$_GET,$_POST(区分大小写) 代码示例:(特别注意复选框属性name的时候加数组) sim ...

  4. mysql-proxy使用中的问题

    Auth: Jin 1.session问题 Date: 20140328问题描述:基于openx 的广告系统,将数据从单点,迁移到mmm集群,前端无法访问报错信息如下:MDB2 Error: Arra ...

  5. Linux关于终端的基本概念汇总(tty/pty)(转)

    在Linux系统的设备特殊文件目录/dev/下,终端特殊设备文件一般有以下几种: 1.串行端口终端(/dev/ttySn) 串行端口终端(Serial Port Terminal)是使用计算机串行端口 ...

  6. POJ 2187 Beauty Contest (求最远点对,凸包+旋转卡壳)

    Beauty Contest Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 24283   Accepted: 7420 D ...

  7. Visio显示不完整

    下面显示不完整的话,选中对象,菜单栏设置(点击对象,右键并没有段落选项)行距为单倍:右侧显示不完整,选中后右键设置环绕方式为负于文字上方,原来是嵌入型.

  8. uboot如何检测XC2440是从Nand或Nor启动

    转:http://blog.chinaunix.net/uid-22030783-id-3347621.html 在XC2440开发板上做uboot从nandflash启动时,需要检测硬件启动方式,启 ...

  9. JSP和Servlet中的几个编码的作用及原理

    首先,说说JSP和Servlet中的几个编码的作用. 在JSP和Servlet中主要有以下几个地方可以设置编码,pageEncoding="UTF-8".contentType=& ...

  10. MySQL5.6安装步骤(windows7/8_64位)

    [转]MySQL5.6安装步骤(windows7/8_64位) 1. 下载MySQL Community Server 5.6.11 2. 解压MySQL压缩包 将以下载的MySQL压缩包解压到自定义 ...