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}