OGNL表达式

Struts2中的表达式语言

Struts 2支持以下几种表达式语言:
1、OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言; 
2、JSTL(JSP Standard Tag Library),JSP 2.0集成的标准的表达式语言; 
3、Groovy,基于Java平台的动态语言,它具有时下比较流行的动态语言(如Python、Ruby和Smarttalk等)的一些起特性; 
4、Velocity,严格来说不是表达式语言,它是一种基于Java的模板匹配引擎,具说其性能要比JSP好。 
Struts 2默认的表达式语言是OGNL

OGNL的优势

OGNL相对其它表达式语言具有下面几大优势:
1、支持对象方法调用,如xxx.doSomeSpecial(); 
2、支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名 |  值名],例如:@java.lang.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME; 
3、支持赋值操作和表达式串联,如price=100, discount=0.8, calculatePrice(),这个表达式会返回80; 
4、访问OGNL上下文(OGNL context)和ActionContext; 
5、操作作用域对象。 

OGNL访问作用域对象

#作用域[“键名”]

OGNL访问值栈中对象属性

1、Action中有username和password两个属性;

2、Action中有User对象

3、Action中有Cat对象,Cat对象有个friend属性是Dog对象,Dog有名字属性;

OGNL访问值栈中对象方法

1、访问值栈中对象的普通方法



2、访问值栈中Action的普通方法


3、访问普通类的构造方法(new 对象)

OGNL访问静态方法或静态属性

1、访问静态方法

注意:访问静态方法要配置常量
value="true"/>

2、访问静态属性


3、特例---------访问Math类的方法

OGNL访问集合

1、List集合(数组与List通用)
访问整个List


访问List中某个元素


访问List中元素某个属性的集合


访问List中元素某个属性的集合中的特定值



2、Set集合
访问整个Set

访问Set中的某个元素
 无法取到数据,因为Set集合是无序的。

3、Map集合
访问Map

访问Map中的某个元素






访问Map中所有的键

访问Map中所有的值

OGNL投影(projecting)

 ------?表示所有的
 -------^表示第一个
 -------$表示最后一个

:OGNL表达式中能使用的操作符基本跟Java里的操作符一样,除了能使用 +, -, *, /, ++, --, ==, !=, = 等操作符之外,还能使用 in, not in等

OGNL中3个重要的符号# % $

1、#符号
访问作用域对象属性,例如#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。实际上,#相当于ActionContext. getContext();#session.msg表达式相当于ActionContext.getContext().getSession(). getAttribute("msg") 。
用于过滤和投影(projecting)集合,如persons.{?#this.age>25},persons.{?#this.name=='pla1'}.{age}[0]。
 用来构造Map,例如

2、%符号
%符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值

3、$符号
在国际化资源文件中,引用OGNL表达式;
在Struts 2框架的配置文件中引用OGNL表达式


你可能感兴趣的:(OGNL表达式)