Struts 2的OGNL的根对象

Struts2中的OGNL表达式语言是对Xwork的OGNL的封装。我们要理解一下几点: 
1. Struts2中将ActionContext作为OGNL的上下文环境(ActionContext内部含有一个Map对象) 
2. Struts2中的OGNL表达式语言的根对象是一个ValueStack,ValueStack中的每一个对象都被视为根对象。 
Struts2框架将实例化的Action对象放入ValueStack中,如果是Action链,则多个Action都存在于ValueStack中。而ValueStack中除了Action外,Struts2框架还将parameters,request,response,session,application,attr等对象放到ActionContext中,访问这些对象需要加前缀#。

总结:Struts2中的数据处理基于Xwork的OGNL,它在OGNL的基础上进行了一定的封装。OGNL的核心概念是根对象(root)和上下文环境(context)---你可以传入一个Map对象作为上下文,向其中put进一个对象,那么这个对象可以作为根对象(ognl中可以向函数中传入不同的Map对象作为根对象来操作,也可以指定不同的根对象,而Struts2中,它固定了根对象ValueStack)。在Struts2中,ActionContext作为OGNL的上下文环境,它的根对象是一个ValueStack,ValueStack中的每个对象都被视为根对象。Struts2中的Action作为根对象存在(如果多个Action以chain的形式存在,则多个Action均存在于ValueStack中,均为根对象)。

时间: 2024-08-26 07:00:14

Struts 2的OGNL的根对象的相关文章

struts标签、OGNL表达式、JSTL标签、EL表达式

Struts标签.Ognl表达式.el表达式.jstl标签库这四者之间的关系和各自作用 我之前虽然会用,但是一直分不清彼此之间有什么区别,所以查找资料,将它们进行整合区分,加深了解, 一 介绍 1.Struts2的作用    Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的代码复用.Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求. Struts2的标签库有一个巨大的改进之

Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用

<转载> 我之前虽然会用,但是一直分不清彼此之间有什么区别,所以查找资料,将它们进行整合区分,加深了解, 一 介绍 1.Struts2的作用   Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的代码复用.Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求.Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于任何表现层技术,也就是说strtus2提供

Struts 2 之 OGNL

OGNL概述 Object-Graph Navigation Language,对象图导航语言 1.能够访问对象的方法,如list.size() 2.能够访问静态属性与静态方法,需要在类名前加上@,如@[email protected],@[email protected]('foo %s','bar') 3.支持赋值操作和表达式串联,如赋值#value=5 4.访问OGNL上下文和ActionContext(所有的Servlet资源) 5.操作集合类对象 6.OGNL表达式的计算是围绕OGNL

Struts(五)之OGNL、contextMap

一.OGNL 1.1.定义 OGNL是Object-Graph Navigation Language的缩写,它是一个单独的开源项目. Struts2框架使用OGNL作为默认的表达式语言.它是一种功能强大的表达式语言, 通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能.它使用相同的表达式去存取对象的属性. 1.2.OGNL的功能 1.2.1.支持普通方法的调用 基础:<s:property value="">类

Struts中的OGNL和EL表达式笔记

Struts中的OGNL和EL表达式笔记 OGNL(Object-Graph Navigation Language),可以方便的操作对象属性的表达式语言. 1.#符号的用途 一般有三种方式: 1.1.访问非根对象属性,如类似于#session.msg表达式,由于Struts2的值栈被当做根对象, 所以访问其他非根对象时,需要加#符号. #符号相当于ActionContext.getContext( ): #session.msg表达式相当于ActionContext.getContext().

Ognl中根元素与非根元素的关系

Ognl中根元素与非根元素的关系 根元素:可以理解为全局变量 非根元素:局部变量 从两者获取其属性的方式看: Object obj = Ognl.parseExpression(“[1]”); [1]根元素:不用写#号,填写属性 非根元素:用写#号,填写对象名字 注:从填写内容能看出全局和局部了 返回得到的obj就是在全文中从上到下搜索到的[1],比如说全局和局部名称一致了,你填写属性那肯定就是全局,都没到局部那个地方就搜索到了. OgnlContext 这就是上下文.上下文干啥的,可以理解下英

OGNL访问复杂对象和静态方法

今天学习了Struts的OGNL访问复杂对象和静态方法,现在来总结下. 1.OGNL访问复杂对象 (1)先创建包model.action.在model中创建模型Student(name,age).action中创建HelloAction package com.fangchao.action; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; imp

不变式与根对象

??????? 一个大型的复杂项目而言,模型趋向于越来越大. 当模型发展到了某个规模,将 它作为整体来讨论很困难,理解不同部件之间的关系和交互变得很困难. ??????因此,强化不变量通常也是有必要的. 不变量是在数据发生变化时必须维护的那些规则. 在许多对象持有正在发生变化的数据对象的引用时,不变量是很难实现和维护的.?????使用 根对象可能会将内部对象的临时引用传递给外部对象,作为限制,当操作完成之后,外部对象不能再持有这个引用. 一种简单的实现方式是向外部对象传递值对象的副本.? ???

[Elasticsearch] 索引管理 (三) - 根对象(Root Object)

根对象(Root Object) 映射的最顶层被称为根对象.它包含了: 属性区域(Properties Section),列举了文档中包含的每个字段的映射信息. 各种元数据(Metadata)字段,它们都以_开头,比如_type,_id,_source. 控制用于新字段的动态探测(Dynamic Detection)的设置,如analyzer,dynamic_date_formats和dynamic_templates. 其它的可以用在根对象和object类型中的字段上的设置,如enabled,