OGNL(Object Graph Navigation Language)是一种表达式语言,使用它可以使表达式与java对象中的getter和setter属性绑定,
且一个OGNL表达式可以进行存和取两方面的操作.
1).使用OGNL的好处
- 是一种 可以把GUI元素和model object绑定的语言!且通过OGNL的TypeConverter
机制可以更容易实现值类型的的转换!
- 可以把Web组件和后台的model 绑定(WebOGNL, Tapestry,WeboWork,WebOjbects)
2).OGNL表达式
OGNL使用集合
使用Collection中的元素须用索引,如:得到array中第一个元素表达式为array[0]
List
例子: name in{null,"init"} 这个例子 当name属性是 空或"init"返回true ,
而在这个过程中会创建List接口的一个实例,具体的子类没有指定
本地Arrays OGNL支持创建Java本地数组! 且允许给定存在的list或设定数组的的大小
new int[] {1,2,3} 创建一个int 数组
new int[5] 创建了一个int数组,它的元素的值为0
Maps 创建Map #{"foo":"fool value","bar":"bar value"}
我们甚至可以指定一个特定的java Map Class 去创建Map
#@java.util.LinkedHashMap@{"foo":"foo value","bar":bar value"};
Java Collection各自有一些特殊的属性
Collection | Special Properties |
Collection(子类有Map List Set) | size 集合的大小 isEmpty 如果集合为空值为true |
List | iterator 得到此list的迭代器 |
Map | keys 得到一个包涵所有键值的Set values 得到一个包括所有值的Collection |
Set | iterator 得到此Set的迭代器 |
Iterator | next 得到集合中的下一个object hasNext如果集合中有下一个object则返回true |
Enumeration | next 如上 hasNext如上 nextElement 和next一样的作用 hasMoreElements和hasNext一样作用 |
OGNL调用JavaBean 索引属性
JavaBean索引属性的格式如下
public PropertyType[] getPropertyName()
public void setPropertyName(propertyType[] anArray)
public PropertyType getPropertyName(int index);
public void setPropertyName(int index,PropertyType value)
OGNL可以很容易地通过索引存取这些属性, Example
someProperty[2]
在这个例子中OGNL会自动找到getSomeProperty(2)或存到setSomeProperty (2,value)中!
调用OGNL对象索引属性
对象索引属性格式
public PropertyType getPropertyName(IndexType index)
public void setPropertyName(IndexType index,PropertyType value)
PropertyType 和IndexType 必需跟集合和get方法中的类型相配
调用方法
OGNL调用方法和Java调用方法有一点区别,因为OGNL是被解释的并且必需在运行时选择正确的方法,所以OGNL调用方法时除了提供所需要参数没有额外的类型信息,OGNL选择和提供的参数最配的方法,如果有两个或更多的方法符合匹配,它们中的一个会任意的被选择(在WebWork中会选择ValueStack上面的方法)
特别一提的是 ,null可以匹配所有非基础类型,所有它通常会导致一个不确定的方法被调用
变量的调用
OGNL有一个简单的变量配置,在这儿你可以存储中间值和重新使用这些中间值,或者仅仅命名以使表达式更易理解! 在OGNL中所有变量都是全局的,使用变量的格式是"#variable"
OGNL把当前的object在每点的表达式值存放在"this"这个变量中,而且"this"可以像其它变量一样使用!例:
listeners.size().(#this>100?2*this:20+#this) 如果listeners中的元素大于100会返回元素数量的两倍,否则数量加上20
可以显式地给变量赋值,只要在变量的后边写一个表达式即可
#var -99
一.运算符 | ||||||||||||||||||||||||||||||||||||||||||||||||
OGNL借用了java的大多数符号,而且它还加了一些新的符号, 如下表:
|