关闭

struts2中的值栈ValueStack

标签: struts2.0struts.xml
924人阅读 评论(0) 收藏 举报
分类:

一、什么是值栈?

我们在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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:70656次
    • 积分:1338
    • 等级:
    • 排名:千里之外
    • 原创:62篇
    • 转载:2篇
    • 译文:0篇
    • 评论:19条
    博客专栏
    最新评论