微信

使用微信服务,更方便

职友集>程序员面试题 > 介绍一下OGNL语言

介绍一下OGNL语言

2015-05-21 06:30:02 阅读( 78 )

1353人 收藏本页

标签:程序员面试题

OGNL(Object Graph Navigation Language)是一种表达式语言。使用这种表达式语言,可以通过某种表达式语法来存取Java对象树中的任意属性、调用Java对象树的方法、同 时能够自动实现必要的类型转化。
OGNL支持各种复杂的表达式。但最基本的表达式的原型,是将对象的引用值用点串联起来,从左到右,每一次表达式计算返回的结果成为当前对象,后面部分接着在当前对象上进行计算,一直到全部表达式计算完成,返回最后得到的对象。OGNL则针对这条基本原则进行不断的扩充,从而使之支持对象树、数组、容器的访问,甚至是类似SQL中的投影选择等操作。
一些常用的OGNL表达式:
1. 基本对象树的访问
对象树的访问就是通过使用点号将对象的引用串联起来进行。
例如:name,department.name,user.department.factory.manager.name
2. 对容器变量的访问
通过#符号加上表达式进行容器变量的访问。
例如:#name,#department.name,#user.department.factory.manager.name
3. 使用操作运算符
OGNL表达式中能使用的操作符基本跟Java里的操作符一样,除了能使用 +, -, *, /, ++, –, ==, !=, = 等操作符之外,还能使用 mod, in, not in等。
4. 容器、数组、对象
OGNL支持对数组和ArrayList等容器的顺序访问:
例如:group.users[0]
同时,OGNL支持对Map的按键值查找:
例如:#session['mySessionPropKey']
OGNL还支持容器的构造的表达式:
如:{“green”, “red”, “blue”}构造一个List,#{“key1″ : “value1″, “key2″ : “value2″, “key3″ : “value3″}构造一个Map
也可以通过任意类对象的构造函数进行对象新建:
如:new java.net.URL(“http://localhost/”)
5. 对静态方法或变量的访问
要引用类的静态方法和字段,他们的表达方式是一样的@class@member或者@class@method(args):
例如:@com.javaeye.core.Resource@ENABLE,@com.javaeye.core.Resource@getAllResources
6. 方法调用
直接通过类似Java的方法调用方式进行,你甚至可以传递参数:
例如:user.getName(),group.users.size(),group.containsUser(#requestUser)
7. 投影和选择
OGNL支持类似数据库中的投影(projection) 和选择(selection)。
投影就是选出集合中每个元素的相同属性组成新的集合,类似于关系数据库的字段操作。投影操作语法为 collection.{XXX},其中XXX 是这个集合中每个元素的公共属性。
例如:group.userList.{username}将获得某个group中的所有user的name的列表。
选择就是过滤满足selection 条件的集合元素,类似于关系数据库的纪录操作。选择操作的语法为:collection.{X YYY},其中X 是一个选择操作符,后面则是选择用的逻辑表达式。而选择操作符有三种:
? 选择满足条件的所有元素
^ 选择满足条件的第一个元素
$ 选择满足条件的最后一个元素
例如:group.userList.{? #this.name != null}将获得某个group中user的name不为空的user的列表。

来自分智网

下一篇:系统日志级别都有什么?如何选择系统的日志级别?

上一篇:i18n什么意思

亲~ 如果您有更好的答案 可在评论区发表您独到的见解。

您想查看更多的信息: 面试题