OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整个对象的结构图,实现对象属性类型的转换等功能。
#符号的用途一般有三种。
— 访问非根对象属性,例如#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,例如示例中的#{'foo1':'bar1', 'foo2':'bar2'}。
$符号主要有两个方面的用途。
— 在国际化资源文件中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在${min}同${max}之间。
— 在Struts 2框架的配置文件中引用OGNL表达式,例如:
总结OGNL的使用方法:
名字属性获取: 地址属性获取: |
调用值栈中对象的普通方法: |
调用Action中的静态方法: 调用JDK中的类的静态方法: 调用JDK中的类的静态方法(同上): 调用JDK中的类的静态方法: 调用普通类中的静态属性: |
调用普通类的构造方法:
|
获取List: 获取List中的某一个元素(可以使用类似于数组中的下标获取List中的内容): 获取Set: 获取Set中的某一个元素(Set由于没有顺序,所以不能使用下标获取数据):
获取Map: 获取Map中所有的键: 获取Map中所有的值: 获取Map中的某一个元素(可以使用类似于数组中的下标获取List中的内容): 获取List的大小: |
利用选择获取List中成绩及格的对象: 利用选择获取List中成绩及格的对象的username: 利用选择获取List中成绩及格的第一个对象的username: 利用选择获取List中成绩及格的第一个对象的username: 利用选择获取List中成绩及格的最后一个对象的username: 利用选择获取List中成绩及格的第一个对象然后求大小: |
OGNL能够引用集合的一些特殊的属性,这些属性并不是JavaBeans模式,例如size(),length()等等. 当表达式引用这些属性时,OGNL会调用相应的方法,这就是伪属性.
集合 |
伪属性 |
Collection(inherited by Map, List & Set) |
size ,isEmpty |
List |
iterator |
Map |
keys , values |
Set |
iterator |
Iterator |
next , hasNext |
Enumeration |
next , hasNext , nextElement , hasMoreElements |
格式::[…]
使用Lambda表达式计算阶乘: |
#可以取出堆栈上下文中的存放的对象.
名称 |
作用 |
例子 |
parameters |
包含当前HTTP请求参数的Map |
#parameters.id[0]作用相当于 request.getParameter("id") |
request |
包含当前HttpServletRequest的属性(attribute)的Map |
#request.userName相当于 request.getAttribute("userName") |
session |
包含当前HttpSession的属性(attribute)的Map |
#session.userName相当于 session.getAttribute("userName") |
application |
包含当前应用的ServletContext的属性(attribute)的Map |
#application.userName相当于 application.getAttribute("userName") |
attr |
用于按request > session > application顺序访问其属性(attribute) |
|
获取Paraments对象的属性:
用%{}可以取出存在值堆栈中的Action对象,直接调用它的方法.
例如你的Action如果继承了ActionSupport .那么在页面标签中,用%{getText('key')}的方式可以拿出国际化信息.
OGNL中$的使用
“$”有两个主要的用途
l 用于在国际化资源文件中,引用OGNL表达式
l 在Struts 2配置文件中,引用OGNL表达式
ValueStack对象。这个对象贯穿整个Action的生命周期(每个Action类的对象实例会拥有一个ValueStack对象)。当 Struts 2接收到一个.action的请求后,会先建立Action类的对象实例,但并不会调用Action方法,而是先将Action类的相应属性放到 ValueStack对象的顶层节点(ValueStack对象相当于一个栈)。
在Action中获得ValueStack对象:ActionContext.getContext().getValueStack()
l Top语法
使用Top获取值栈中的第二个对象:
l N语法
使用N获取值栈中的第二个对象:
l @语法
调用action中的静态方法:
OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整个对象的结构图,实现对象属性类型的转换等功能。
#符号的用途一般有三种。
— 访问非根对象属性,例如#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,例如示例中的#{'foo1':'bar1', 'foo2':'bar2'}。
$符号主要有两个方面的用途。
— 在国际化资源文件中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在${min}同${max}之间。
— 在Struts 2框架的配置文件中引用OGNL表达式,例如:
总结OGNL的使用方法:
名字属性获取: 地址属性获取: |
调用值栈中对象的普通方法: |
调用Action中的静态方法: 调用JDK中的类的静态方法: 调用JDK中的类的静态方法(同上): 调用JDK中的类的静态方法: 调用普通类中的静态属性: |
调用普通类的构造方法:
|
获取List: 获取List中的某一个元素(可以使用类似于数组中的下标获取List中的内容): 获取Set: 获取Set中的某一个元素(Set由于没有顺序,所以不能使用下标获取数据):
获取Map: 获取Map中所有的键: 获取Map中所有的值: 获取Map中的某一个元素(可以使用类似于数组中的下标获取List中的内容): 获取List的大小: |
利用选择获取List中成绩及格的对象: 利用选择获取List中成绩及格的对象的username: 利用选择获取List中成绩及格的第一个对象的username: 利用选择获取List中成绩及格的第一个对象的username: 利用选择获取List中成绩及格的最后一个对象的username: 利用选择获取List中成绩及格的第一个对象然后求大小: |
OGNL能够引用集合的一些特殊的属性,这些属性并不是JavaBeans模式,例如size(),length()等等. 当表达式引用这些属性时,OGNL会调用相应的方法,这就是伪属性.
集合 |
伪属性 |
Collection(inherited by Map, List & Set) |
size ,isEmpty |
List |
iterator |
Map |
keys , values |
Set |
iterator |
Iterator |
next , hasNext |
Enumeration |
next , hasNext , nextElement , hasMoreElements |
格式::[…]
使用Lambda表达式计算阶乘: |
#可以取出堆栈上下文中的存放的对象.
名称 |
作用 |
例子 |
parameters |
包含当前HTTP请求参数的Map |
#parameters.id[0]作用相当于 request.getParameter("id") |
request |
包含当前HttpServletRequest的属性(attribute)的Map |
#request.userName相当于 request.getAttribute("userName") |
session |
包含当前HttpSession的属性(attribute)的Map |
#session.userName相当于 session.getAttribute("userName") |
application |
包含当前应用的ServletContext的属性(attribute)的Map |
#application.userName相当于 application.getAttribute("userName") |
attr |
用于按request > session > application顺序访问其属性(attribute) |
|
获取Paraments对象的属性:
用%{}可以取出存在值堆栈中的Action对象,直接调用它的方法.
例如你的Action如果继承了ActionSupport .那么在页面标签中,用%{getText('key')}的方式可以拿出国际化信息.
OGNL中$的使用
“$”有两个主要的用途
l 用于在国际化资源文件中,引用OGNL表达式
l 在Struts 2配置文件中,引用OGNL表达式
ValueStack对象。这个对象贯穿整个Action的生命周期(每个Action类的对象实例会拥有一个ValueStack对象)。当 Struts 2接收到一个.action的请求后,会先建立Action类的对象实例,但并不会调用Action方法,而是先将Action类的相应属性放到 ValueStack对象的顶层节点(ValueStack对象相当于一个栈)。
在Action中获得ValueStack对象:ActionContext.getContext().getValueStack()
l Top语法
使用Top获取值栈中的第二个对象:
l N语法
使用N获取值栈中的第二个对象:
l @语法
调用action中的静态方法: