OGNL

一、OGNL简介

  OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去

存取对象的属性。

二、相对其它表达式语言具有下面几大优势

  1、支持对象方法调用,如xxx.doSomeSpecial();

  2、支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名 | 值名],例如:@java.lang.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME;

  3、支持赋值操作和表达式串联,如price=100, discount=0.8, calculatePrice(price*discount),这个表达式会返回80

  4、访问OGNL上下文(OGNL context)和ActionContext

  5、操作集合对象

  6、可以直接new一个对象

三、结合Struts2符号(#、%、$)使用,主要有三种用途

  1、访问OGNL上下文和Action上下文,#相当于ActionContext.getContext()

  2、用于过滤和投影(projecting)集合,如books.{?#this.price<100}

  3、构造Map,如#{'foo1':'bar1', 'foo2':'bar2'}

四、表达式

  1、基本对象树的访问:用 . (点号)连接对象和属性

  2、对容器变量的访问:用 # (井号)加上表达式

  3、使用操作符号

  4、数组、ArrayList等容器顺序访问,Map按键查找,容器的构造表达式、对象构建

     如:group.users[0]

      #session['mySessionPropKey']

        {"green", "red", "blue"}构造一个List、

        #{"key1" : "value1", "key2" : "value2", "key3" : "value3"}构造一个Map

     new Java.net.URL("xxxxxx/")

  5、对静态方法或变量的访问,如:@com.javaeye.core.Resource@ENABLE

  6、方法调用:group.containsUser(#requestUser)

  7、投影或选择:投影 group.userList.{username}       选择group.userList.{? #txxx.xxx != null}

  选择操作符有三种:

  ? 选择满足条件的所有元素
  ^ 选择满足条件的第一个元素
  $ 选择满足条件的最后一个元素
原文地址:https://www.cnblogs.com/zxguan/p/7819605.html