Struts2值栈

二、ValueStack

1.概述

ValueStack是一个接口

com.opensymphony.xwork2.util.ValueStack

 

它的实现类是

com.opensymphony.xwork2.ognl.OgnlValueStack

 

①作用

Struts2为每一个请求都分配了一个ValueStack对象,目的是为每一个请求都提供一个临时的数据存储空间。

 

②两个数据容器

分析OgnlValueStack源码,其中包含两个重要的数据容器

    CompoundRoot root;//通常称为“对象栈”

    transient Map<String, Object> context;//通常称为“Map栈”

 

③对象栈

[1]CompoundRoot类声明

//继承自ArrayList

public class CompoundRoot extends ArrayList {

[2]CompoundRoot是在List基础之上实现的“栈”——后进先出。

 

    //返回栈顶对象

    public Object peek() {

        return get(0);

    }

 

    //删除栈顶对象并返回

    public Object pop() {

        return remove(0);

    }

 

    //将对象压入栈顶

    public void push(Object o) {

        add(0, o);

    }

[3]如何方便的查看值栈中的数据?

(1)在JSP页面上导入Struts2标签库

<%@ taglib uri="/struts-tags" prefix="s" %>

 

(2)使用<s:debug></s:debug>标签

(3)点击[Debug]超链接即可展开值栈数据列表

[4]对象栈中的数据

(1)默认情况下对象栈中的数据

可以看到,默认情况下Struts2会将当前Action对象压入值栈的栈顶,前面提及的message属性值就是从栈顶Action对象中获取的。

如何理解“当前Action”?

  • 当前请求的目标Action
  • 转发到当前页面的“来源”Action

(2)手动压入对象后

 

 

 

本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源,欢迎大家关注尚硅谷公众号(atguigu)了解更多。