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" />








转载于:https://my.oschina.net/mickeymouse/blog/518731

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值