1. OGNL表达式介绍

OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。                -------百度百科
  从语言角度来说:它是一个功能强大的表达式语言,用来获取和设置 java 对象的属性 ,它旨在提供一个更高抽象度语法来对 java 对象图进行导航。另外,java 中很多可以做的事情,也可以使用 OGNL 来完成,例如:列表映射和选择。对于开发者来说,使用 OGNL,可以用简洁的语法来完成对 java 对象的导航。通常来说:通过一个“路径”来完成对象信息的导航,这个“路径”可以是到 java bean 的某个属性,或者集合中的某个索引的对象,等等,而不是直接使用 get 或者 set 方法来完成。

首先来介绍下OGNL的三要素:

一、表达式:

表达式(Expression)是整个OGNL的核心内容,所有的OGNL操作都是针对表达式解析后进行的。通过表达式来告诉OGNL操作到底要干些什么。因此,表达式其实是一个带有语法含义的字符串,整个字符串将规定操作的类型和内容。OGNL表达式支持大量的表达式,如“链式访问对象”、表达式计算、甚至还支持Lambda表达式。

二、Root对象:

OGNL的Root对象可以理解为OGNL的操作对象。当我们指定了一个表达式的时候,我们需要指定这个表达式针对的是哪个具体的对象。而这个具体的对象就是Root对象,这就意味着,如果有一个OGNL表达式,那么我们需要针对Root对象来进行OGNL表达式的计算并且返回结果。

三、上下文环境:

有个Root对象和表达式,我们就可以使用OGNL进行简单的操作了,如对Root对象的赋值与取值操作。但是,实际上在OGNL的内部,所有的操作都会在一个特定的数据环境中运行。这个数据环境就是上下文环境(Context)。OGNL的上下文环境是一个Map结构,称之为OgnlContext。Root对象也会被添加到上下文环境当中去。

OGNL 的基本语法:

1. 对Root对象的访问

OGNL使用的是一种链式的风格进行对象的访问。具体代码如下:

View Code
  2. 对上下文对象的访问

使用OGNL的时候如果不设置上下文对象,系统会自动创建一个上下文对象,如果传入的参数当中包含了上下文对象则会使用传入的上下文对象。当访问上下文环境当中的参数时候,需要在表达式前面加上’#’,表示了与访问Root对象的区别。具体代码如下:

View Code
  这段代码很好的区分了访问Root对象和访问上下文对象的区别。

3. 对静态变量的访问

在OGNL表达式当中也可以访问静态变量或者调用静态方法,格式如@[class]@[field/method()]。具体代码如下:

View Code
  4. 方法的调用

如果需要调用Root对象或者上下文对象当中的方法也可以使用.+方法的方式来调用。甚至可以传入参数。代码如下:

View Code
  从代码可以看出来,赋值的时候可以选择上下文当中的元素进行给Root对象的name属性赋值。

5. 对数组和集合的访问

OGNL支持对数组按照数组下标的顺序进行访问。此方式也适用于对集合的访问,对于Map支持使用键进行访问。代码如下:

View Code
  从上面代码不仅看到了访问数组与集合的方式同时也可以看出来OGNL表达式当中支持操作符的简单运算。有如下所示:

2 + 4 //整数相加(同时也支持减法、乘法、除法、取余[ % / mod]、)

“hell” + “lo” //字符串相加

i++ //递增、递减

i == j //判断

var in list //是否在容器当中

6. 投影与选择

OGNL支持类似数据库当中的选择与投影功能。

投影:选出集合当中的相同属性组合成一个新的集合。语法为collection.{XXX},XXX就是集合中每个元素的公共属性。

选择:选择就是选择出集合当中符合条件的元素组合成新的集合。语法为collection.{Y XXX},其中Y是一个选择操作符,XXX是选择用的逻辑表达式。

选择操作符有3种:

? :选择满足条件的所有元素

^:选择满足条件的第一个元素

$:选择满足条件的最后一个元素

示例代码如下:

View Code
  7. 创建对象

OGNL支持直接使用表达式来创建对象。主要有三种情况:

构造List对象:使用{},中间使用’,'进行分割如{“aa”, “bb”, “cc”}

构造Map对象:使用#{},中间使用’,进行分割键值对,键值对使用’:'区分,如#{“key1” : “value1”, “key2” : “value2”}

构造任意对象:直接使用已知的对象的构造方法进行构造。

示例代码如下:

View Code
  这篇OGNL的介绍就到这里,本文并没有把OGNL的所有内容都介绍出来,主要介绍了OGNL的一些简单的知识,后面有时间的话我会陆续介绍OGNL的相关知识,并且结合Struts2深入分析下OGNL的构成。同样谢谢大家的阅读,本人写博文的时候难免有错误的地方,如果大家发现希望大家给予指正,谢谢。

Ognl表达式的一些用法相关推荐

  1. OGNL表达式的基本用法

    OGNL表达式的基本用法 借助 s:property标签输出内容到浏览器 s:property的作用 写法: <%--导入标签库--%> <%@ taglib uri="/ ...

  2. ognl表达式的简单用法

    首先我们一起来看一下OGNL中的#.%和$符号. 一.OGNL中的#.%和$符号 #.%和$符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分.在这里我们简单介绍它们的相应用 ...

  3. OGNL表达式的基本语法和用法

    一.OGNL中的#.%和$符号 #.%和$符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分.在这里我们简单介绍它们的相应用途. 1.#符号的三种用法 1)访问非根对象属性, ...

  4. OGNL表达式的用法

    OGNL的用法 OGNL是通常要结合Struts 2的标志一起使用,如<s:property value="xx" />等.大家经常遇到的问题是#.%和$这三个符号的使 ...

  5. 深入理解Struts2中的OGNL表达式

    Struts 2中的表达式语言 Struts 2支持以下几种表达式语言: OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言: JST ...

  6. 为了熟练掌握动态SQL你必须要知道Mybatis中的OGNL表达式

    前言 OGNL是个什么东西?很多刚入门Java的同学会有点陌生.但是在Structs流行的时代OGNL可是必会的数据渲染技术.它全称Object Graph Navigation Language,作 ...

  7. struts2教程(9)--OGNL表达式使用

    OGNL表示式使用和值栈 一.介绍 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts2框架使用OGNL作为默认的 ...

  8. java el ognl_el表达式跟ognl表达式的区别

    EL表达式: >>单纯在jsp页面中出现,是在四个作用域中取值,page,request,session,application. >>如果在struts环境中,它除了有在上面 ...

  9. OGNL表达式struts2标签“%,#,$”

    http://www.blogjava.net/parable-myth/archive/2010/10/28/336353.html 一.什么是OGNL,有什么特点? OGNL(Object-Gra ...

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

    来自:http://blog.csdn.net/love_you_99/article/details/8184797 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极 ...

最新文章

  1. 通过正则表达式校验手机号码,拿走即用!
  2. tkinter的函数与实例
  3. 《深入理解Android:Telephony原理剖析与最佳实践》一1.1 智能手机的系统结构
  4. 多线程编程 (1) -NSThread
  5. php算法台阶,php如何解决青蛙跳台阶的问题(代码)
  6. 黑马h5学习代码_如何零基础制作酷炫实用的H5页面
  7. SiamFC++,90 fps的单目标跟踪SOTA
  8. 好文力荐 | MySQL 索引、B+树原理以及建索引的几大原则
  9. 咸鸭蛋吃了对身体有什么好处?
  10. java维护_java配置和维护
  11. python 函数
  12. Sublime Text2.0.2注册码,添加python编译系统:
  13. 京东万能转链API接口 含商品信息优惠券转链 京东线报如何转链?
  14. 世预赛乌拉圭VS哥伦比亚最新赛事解析:客场保平属性强怎么下单
  15. Error(错误)、Exception(异常)之间区别
  16. 无人驾驶汽车激光雷达用胶的三大要求
  17. OpenSSL生成.key、.crt、.pfx证书(Windows下)
  18. TVS相关参数与选型
  19. C++ 魔兽世界之二:装备
  20. ArcGIS教程:解决在mxd文件,定义投影之后,数据源还是的投影坐标系还是未发生改变的问题。

热门文章

  1. 基于汇编与c语言的单片机原理及应用答案,基于汇编与C语言的单片机原理及应用...
  2. java编译器哪个好_java编译器什么好?java编译器工作原理是什么?
  3. python同花顺实时_python同花顺自动交易_基于python的炒股软件
  4. DDOS硬件防火墙DIY技术揭密
  5. ibm服务器查看刀片状态,IBM刀片服务器 blade center s常见问答
  6. 江西省吉安市永丰县市政花园(市政服务大楼[厅]) 工程质量及违法违规建筑容积率问题2011年11月简述报告
  7. 【Android -- 性能优化】启动速度分析工具 — TraceView
  8. BeanUtils与PropertyUtils的常用方法
  9. 《SPSS统计分析与行业应用实战》之序言
  10. 小米max刷鸿蒙,用了小米Max2,这简直是浪费我一天一夜的时间!