Struts中的值栈

什么是值栈?

值栈:ValueStack.其贯穿整个 Action 的生命周期(每个 Action 类的对象实例都拥有一个 ValueStack 对象). 相当于一个数据的中转站. 在其中保存当前s.

* 创建一个Action的实例,创建一个ValueStack.

Struts 框架把 ValueStack 对象保存在名为 “struts.valueStack” 的请求属性中,request中.

* 将值栈保存在request域中一份. request.setAttribute(struts.valueStack,valueStack);

值栈的内部结构?

值栈的内部结构有两个逻辑单元:

* 一个对象栈 :root CompoundRoot就是一个ArrayList.

* 一个ContextMap :context OgnlContext就是一个Map.

值栈ValueStack 和 ActionContext关系? --- 值栈的创建

查看源码;

* 在创建ActionContext时候,创建了ValueStack对象,同时将ValueStack存入到ActionContext中.

* 可以通过ActionContext对象获得到值栈对象

1
2
3
4
5
6
public class A{
       private B b;
       }
public class B{
      private A a;
      }

如何获得值栈对象?

1.通过ActionContext对象获得值栈.

// 1.获得值栈方式一:

1
ValueStack stack1 = ActionContext.getContext().getValueStack();

2.通过request域获得值栈对象.

// 2.获得值栈方式二:

1
ValueStack stack2 = (ValueStack) ServletActionContext.getRequest().getAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY);

向值栈保存数据?

一般情况下说操作值栈:指的是操作值栈的root部分.

* push :将对象压入到栈顶.

* set :将对象压入到栈顶.

如果没有手动调用push或者set的时候:Action对象默认是在栈顶的.

* Action中的属性是否在栈中?一定在.

如果Action实现ModelDriven接口了:

* ModelDriven对象就会在栈顶.

在页面通过struts2标签 获取值栈内容?

获得root数据:

1
2
3
4
5
6
7
8
<s:property value= "[1].top" />
<s:property value= "name" />
<s:property value= "user.username" />
<s:property value= "user.password" />
<s:property value= "username" />
<s:property value= "password" />
<s:property value= "list[0].username" />
<s:property value= "list[0].password" />

获得context的数据:

1
2
3
4
5
获得request中的数据:< s:property value = "#request.name" />< br />
获得session中的数据:< s:property value = "#session.name" />< br />
获得application中的数据:< s:property value = "#application.name" />< br />
< s:property value = "#attr.name" />
< s:property value = "#parameters.username" />






来自为知笔记(Wiz)


你可能感兴趣的:(Struts中的值栈)