struts2值栈

1、值栈的生命周期

 值栈是在struts2拦截请求创建ActionContext后创建的,是由框架的配置文件静态注入的。值栈的声明周期是一次请求。

2、如何获取值栈

 通常通过ActionContext.getContext().getValueStack()来获取

3、值栈的数据结构

 值栈分为对象栈和Map栈。值栈的整个上下文可通过ActionContext.getContext().getValueStack().getContext()来获取

 对象栈(CompoundRoot)实际上是一个List(实现了List),里面默认有两个对象,一个就是当前访问的Action,另一个时Struts处理国际化的DefaultTextProvider。可以通过ValueStack的getRoot().add([index],Object)往对象栈中添加数据,指定index为0则会将对象放入对象栈的栈顶。ValueStack的push方法底层也是利用add(0,obj)来实现往栈顶放对象。

Map栈(ognlContext)实际上是一个Map,里面放了request、session、application等servlet域对象。

4、将数据放入值栈的方式

 对象栈

  ValueStack的push(往栈顶放对象),add([index,]obj),peek(获取栈顶对象),pop(移除栈顶对象),set(key,obj)把一个map放入对象栈。

 Map栈

  ActionContext.getContext().put(key,obj)

5、对象栈和Map栈有什么区别

 对象栈中的对象的属性能够直接访问,方便做数据回显。访问对象栈中的对象直接使用属性名.对象属性的ognl表达式即可。而访问Map栈中的数据如request域中的user对象的用户名需要使用“#”,即#request.user.username,要通过map的名、对象的key找到对象。而对象栈是自顶向下寻找指定的属性名,找到即返回。

6、对象栈有什么特点

 使用ognl表达式访问对象栈的对象的属性时,将从栈顶依次往下找到属性名,先找到的为准。使用struts标签s:iterator迭代

集合时,当前迭代的元素将位于对象栈栈顶。你要用使用ognl表达式访问对象栈的对象的属性时,将从栈顶依次往下找到属性

名,先找到的为准。使用struts标签s:iterator迭代集合时,当前迭代的元素将被放于对象栈栈顶当往对象栈的栈顶放对象后

 ,若该对象是一个集合且你要使用iterator标签迭代它,那么你可以不指定标签的value属性值,或指定value属性值为

top


迭代map时,指定s:propert标签的value值为key或value即可获得当前迭代元素包含的对象和对象在map中key。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值