OGNL详解

OGNL即Object Graph Navigation Language四个单词的缩写,意为对象图导航语言,下面看一下它的用法

1.访问根对象的name属性,格式如下:

Object object = Ognl.parseExpression("name");//解析属性name,返回与之关联的对象
Object object2 = Ognl.getValue(object, context, context.getRoot());//通过name属性寻找对象对应的getName方法,就可以获取到name属性的值

2.访问非根对象的name属性

Object object = Ognl.parseExpression("#dog.name");//解析dog对象的name属性,返回与之关联的对象
Object object2 = Ognl.getValue(object, context, context.getRoot());//通过name属性寻找对象对应的getName方法,就可以获取到name属性的值
3.加#与不加#的区别

当解析的属性名前不加#时,表示解析的是OGNL上下文对象中的根对象,反之,则解析的是非根对象。

4.Ognl调用方法

Object object7 = Ognl.parseExpression("name.toUpperCase()");//调用了字符串的小写转换为大写的方法toUpperCase()
Object object8 = Ognl.getValue(object7, context, context.getRoot());

5.Ognl调用静态方法

Object object9 = Ognl.getValue("@java.lang.Integer@toBinaryString(20)", context,context.getRoot());

第一个@后为类的全称,第二个@后为要调用的静态方法,该代码的作用是将整数20转换为二进制代码的形式。

6.Ognl调用静态成员变量,若是调用Math类里面的静态变量或静态方法,则无需指定类名

Object object10 = Ognl.getValue("@@PI", context, context.getRoot());

返回PI的值,即3.1415926927...

7.Ognl生成对象,以及集合生成方式,下标索引访问集合中的元素

Object object11 = Ognl.getValue("new java.util.LinkedList()", context, context.getRoot());

创建了一个LinkedList类型的对象

Object object12 = Ognl.getValue("{'11','22','33','44'}[2]", context, context.getRoot());

返回集合当中的第三个元素

8.Ognl解析Map对象

Ognl.getValue("#{'key1':'value1','key2':'value2','key3':'value3'}", context, context.getRoot())

创建了一个Map类型的对象{key1=value1, key2=value2, key3=value3}

Ognl.getValue("#{'key1':'value1','key2':'value2','key3':'value3'}['key2']", context,context.getRoot())

返回了Map当中键值为key2所对应的value值

9.OGNL的过滤与投影

1)过滤(filtering),语法格式如下:

collection.{? expression}

返回一个集合,类似于表的取行操作,collection为待操作的集合,expression为筛选的条件,?表示所有满足条件

的对象都将返回到集合中;

返回集合中第一个元素,语法格式collection.{^ expression};

返回集合中最后一个元素,语法格式collection.{$ expression}。

2)投影(projection),相当于数据库中表的取列操作,语法格式如下:

collection.{expression}

你可能感兴趣的:(OGNL详解)