Struts2-Value Stack浅析

Value Stack的做用:

1.       能够做为一个数据中转站 web

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

Value Stack的生命周期:

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

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

         PrepareOperations类的createActionContext中有 继承

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

Value Stack结构:

         主要看OgnlValueStack类,此类实现了ValueStack接口。 生命周期

OgnlValueStack中有两个相当重要的东西, 内存

,简称“对象栈“Map get

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

相关文章
相关标签/搜索