struts2中的值栈ValueStack

一、什么是值栈?

我们在JSP中使用的request是经struts2包装后了的对象其值在值栈中保存。通过了解值栈,方便我们使用值栈中的对象和属性进行软件开发。


ValueStack对象有两个逻辑部分

第一个部分ContextMap:Struts把各种各样的映射关系(一些Map类型的对象)压入ContextMap中,实际上就是对ActionContext的一个引用。Struts会把下面这些映射压入ContextMap中
parameters:该Map中包含当前请求的请求参数
request:该Map包含当前request对象中的所有属性
session:该Map中包含当前session对象中的所有属性
application:该Map中包含当前application对象中的所有属性
attr:该Map按如下顺序来检索某个属性:request。session。application

ObjectStack:Struts把Action和相关对象压入ObjectStack中


二、关于值栈的使用?

1.${productName} 读取productName值,实际上该属性并不在request等域对象中,而是从值栈中获取的
2.ValueStack:
可以从ActionContext中获取值栈对象
值栈分为两个逻辑部分
Map栈:实际上是OGNLContext类型,是个Map,也是对ActionContext的一个引用,里边保存着各种Map
requestMap,sessionMap,parametersMap,applicationMap,attr
对象栈:实际上是CompoundRoot类型,是一个使用ArrayList定义的栈,里边保存各种和当前Action实例相关的对象,实际上是一个真正意义上的栈


3.Struts2利用s:property标签和OGNL表达式来读取值栈中的属性值

对于对象栈:对象栈中某一个对象的属性值

Map栈: request、session、application、和一个属性值或一个请求参数的值


4.读取ObjectStack里的对象的属性:
方式一:abject.propettyName   通常使用这种
方式二:abject['propettyName']
方式三:abject["propettyName"]
ObjectStack里的对象可以通过一个从零开始的下标来引用。
ObjectStack里的栈顶对象可以用[0]来引用,它下面的那个对象可以用[1]引用。若希望返回栈顶对象的message属性值使用如下方式:
[0].message
[0]['message']
[0]["message"]

若在指定的对象里没有找到指定的属性,则到指定对象的下一个对象里继续搜索,即[n]的含义是从第n个开始搜索,而不是只搜索第n个对象

若从栈顶对象开始搜索,则可以省略下标部分。message

结合s:property标签: <s:property value="[0].message"/>

默认情况下,Action对象会被Struts2放到栈顶 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值