关闭

struts2中几个核心的组件ActionContext、ValueStack、OGNL表达式

321人阅读 评论(0) 收藏 举报
分类:

转自:http://www.iteye.com/topic/1126455

1、ActionContext 


当struts2框架接收到一个HTTP请求时,它立刻创建一个ActionContext、ValueStack、Action对象 

ActionContext里有6个对象,分别是valueStack、parameters、request、session、application、attr 

一个OGNL表达式,必须选择ActionContext中的一个对象作为根对象(root),默认情况下,是选择valueStack作为根对象,如果需要使用另外5个对象作为根对象,需要加上#前缀 

例如: 
Java代码  收藏代码
  1. <s:property value="#session.xxx" />  

如果不加#前缀,则默认使用valueStack作为根对象,这也是最常见的情况,即#valueStack.xxx,相当于xxx 

2、ValueStack(值栈) 

ValueStack中可以存储很多对象,它的一个特性是,它是一个虚拟对象,它可以将自己持有的对象的属性,当成是自己的属性 

比如说,ValueStack中有一个Action对象,而Action对象有一个name字段。那么当用OGNL表达式取name的值的时候,不需要${action.name},而是可以直接${name} 

ValueStack是一个栈的数据结构(FILO),最后进入值栈的对象,总是在ValueStack的栈顶,这个结论很重要,因为栈顶的元素的值,会覆盖栈底的同名元素的值。 

比如说,ValueStack的栈底是一个Action对象,持有一个name字段;栈顶是一个Model对象,也持有一个name字段,那么用${name},取出来的永远是Model对象的name字段,Action对象的name字段是不可见的 

3、OGNL表达式 

这个可以分为2种场景,一种是在<s:>标签的属性里(比如<s:property value="" />),一种是在jsp页面的其他地方 

在<s:>标签的属性里时,要看这个属性定义的类型是什么,如果是string类型,那么属性的值会被当做普通的string,如果不是string类型,那么属性的值会被直接当成OGNL的表达式 

比如说<s:property value="" />,这个标签的value属性的类型是object,那么这个value的值,就会被直接作为OGNL表达式进行解析 

如果想在string类型的属性中使用OGNL表达式,就需要加上${}或者%{} 

在jsp页面的其他地方时(即不在<s:>标签内部),任何情况下都会当成string来处理,这时候如果想使用OGNL表达式,也需要加上${}或者%{} 

4、关于${}和%{}的区别 

根据文档里的描述,OGNL表达式应该用%{}来表示。可是我在实际应用中,基本不会使用<s:>标签,并且都是用${}来取值的,也没有发现任何不妥,不知道是不是版本的原因
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Action Context中值栈(value Stack )栈上下文(Stack context)的个人理解

Action Context就是Stack Context栈上下文; Stack Context、ActionContext或者OGNL上下文都是一个东西:Ognl.getValue(exp,con...
  • itelyder
  • itelyder
  • 2015-10-20 00:22
  • 2994

用OGNL表达式取值栈中的值

首先,简单介绍一下Struts2标签 使用Struts2标签,需要先在页面中引入Struts2标签库: 标签库的位置在struts2-core-2.3.1.2.jar包中的META-INF/strut...
  • WJB08223
  • WJB08223
  • 2015-09-25 13:47
  • 3824

Struts2工作原理(图解)—六大核心组件关系

写在前面:Struts2主要包含前端控制器FC、Action、ValueStack容器、Result、Interceptor拦截器、Tags标签6个核心组件,本文主要介绍这几个组件的合作关系,由此构成...
  • daijin888888
  • daijin888888
  • 2016-05-20 14:34
  • 4328

struts2中几个核心的组件ActionContext、ValueStack、OGNL表达式

转自:http://www.iteye.com/topic/1126455 1、ActionContext  当struts2框架接收到一个HTTP请求时,它立刻创建一个ActionConte...
  • asdf544265772
  • asdf544265772
  • 2012-10-09 10:48
  • 1053

Struts2 ValueStack & ActionContext & OGNL 关系

1.原生的OGNL  1) Introduction   OGNL stands for Object-Graph Navigation Language; it is an expres...
  • jiangtongcn
  • jiangtongcn
  • 2012-06-16 23:56
  • 1936

关于Struts2中的ValueStack,ActionContext,OgnlContext的理解之一:OGNL

1.在讨论ValueStack及ActionContext之前,我们必须先从Ognl说起:           OGNL(Object Graph Navigation Language)对象图导航语...
  • tssxs
  • tssxs
  • 2013-09-04 22:59
  • 614

关于Struts2中的ValueStack,ActionContext,OgnlContext的理解之二:Struts2中的OGNL

在我们理解了OGNL框架之下的表达式计算特性之后,我们简单做一总结如下:         在OGNL中,表达式计算所依据的两部分为:root和OgnlConext离开这两个要素,ognl表达式就失去...
  • tssxs
  • tssxs
  • 2013-09-05 02:01
  • 583

Struts2中ActionContext、Ognlcontext、OgnlValueStack对象关系图,ognl表达式根元素分析

关系图: Action: public String execute() throws Exception{ List list = new ArrayList(); List li...
  • zyw23zyw23
  • zyw23zyw23
  • 2017-05-25 18:46
  • 326

深入分析JavaWeb Item48 -- Struts2中OGNL表达式与ValueStack

一、OGNL表达式1、OGNL表达式介绍OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目。 Struts2框架使用OGNL作为默...
  • i10630226
  • i10630226
  • 2016-01-11 15:50
  • 8641

struts2 与 OGNL 表达式,jsp中 利用ognl 在valuestack中取值

关于struts2中利用ognl取得valuestack 中的值例题分析
  • u012256142
  • u012256142
  • 2014-06-11 17:49
  • 1443
    个人资料
    • 访问:95717次
    • 积分:1802
    • 等级:
    • 排名:千里之外
    • 原创:50篇
    • 转载:218篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论