Struts2之ValueStack(值栈)讲解

5 篇文章 0 订阅
2 篇文章 0 订阅

先说说值栈的存储结构,在值栈内部有两部分构成,一个成为Root的 List集合,另一个是成为Context的Map集合,这里的Context其实就是之前讲的ActionContext,之前的ActionContext讲解中说到它就是一个Map,看下图:


下面是之前讲解ActionContext中的图:


有没有感觉ActionContext和ValueStack中Context很像,没错,他们指的就是同一个东西,所以这里的Context的作用就是ActionContext,具体详解请看之前的文章 Struts2之ActionContext讲解 


这里就主要讲解一下Root

上面说root是一个List,而且是一个ArrayList,从源码中可以看到


既然知道root是一个List集合,那么它的作用是什么呢?

在没有任何的代码操作下,里面只存储了一个:当前要访问的Action


值栈存值

ValueStack valueStack = ActionContext.getContext().getValueStack();

在上面代码中是通过ActionContext获得值栈,也就是说ActionContext这个Map中也保存了ValueStack这个对象的引用。

在上面图中讲到,ValueStack中有root和ActionContext


图中就看到通过Valuestack可以得到Root和ActionContext这两个对象

那么就是说,ValueStack和ActionContext它们是互相引用。

在ActionContext中有一个获得值栈的方法

ValueStack stack = ActionContext.getContext().getValueStack();
stack.set("name", "哈哈");
Object value = stack.findValue("哈哈");

从后两行对值栈的操作来看,ValueStack是一个Map集合,可是从上面的解释来看,ValueStack只是一个普通的接口,

其实在ValueStack内部封装了一个Map集合,就是一个用来存储数据的,

所以现在可以看ValueStack内部封装了三样东西:

List类型的 root

Map类型的 Context

还有一个Map用来存储数据,那么这个map在哪里呢,看下图:


也就是第三个Map被Root这个List引用,当调用set("name","哈哈")的时候,其实就是向Map中放数据,get("name")就是从这个Map中取值

证明:






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值