ValueStack、OGNL和Struts2标签

来源:互联网 发布:幸运pc28软件下载 编辑:程序博客网 时间:2024/05/21 08:05

一、ValueStack

1.ValueStack(值栈): 贯穿整个 Action 的生命周期(每个 Action 类的对象实例都拥有一个 ValueStack对象). 相当于一个数据的中转站. 

在其中保存当前Action 对象和其他相关对象.

2.Struts 框架把 ValueStack对象保存在名为“struts.valueStack” 的请求属性中


3.在 ValueStack 对象的内部有两个逻辑部分:

  1. ObjectStack:实际上是CompoundRoot类型,是一个使用ArrayList定义的栈。Struts 把 Action 和相关对象压入 ObjectStack 中。是一个数据结构意义的栈。
  2. ContextMap:实际上是OgnlContext类型,是个Map,也是对 ActionContext 的一个引用。Struts 把各种各样的映射关系(一些 Map 类型的对象) 压入 ContextMap 中。。

Struts 会把下面这些映射压入 ContextMap中

  • parameters: 该 Map 中包含当前请求的请求参数
  • request: 该 Map 中包含当前 request对象中的所有属性
  • session: 该 Map 中包含当前 session 对象中的所有属性
  • application:该 Map 中包含当前 application  对象中的所有属性
  • attr: 该 Map 按如下顺序来检索某个属性: request, session, application

       默认情况下,Action对象会被struts2 自动的放到值栈的顶端

二、OGNL

在 JSP 页面上可以可以利用OGNL(Object-Graph Navigation Language: 对象-图导航语言) 访问到值栈(ValueStack)里的对象属性.

若希望访问值栈中ContextMap 中的数据, 需要给 OGNL 表达式加上一个前缀字符#. 

例如<s:property value="#session.user.username">

如果没有前缀字符 #, 搜索将在 ObjectStack 里进行.

例如<s:property value="username">

 

0 0
原创粉丝点击