OGNL的学习

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

基本介绍:

OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,经过它简单一致的表达式语法,能够存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。这样能够更好的取得数据。OGNL可让咱们用很是简单的表达式访问对象层,例如,当前环境的根对象为user1,则表达式person.address[0].province能够访问到user1的person属性的第一个address的province属性。这种功能是模板语言的一个重要补充,像jsp2.0,velocity,jelly等等,都有相似的功能,可是ognl比它们完善得多,并且以一个独立的lib出现,方便咱们构建本身的框架。webwork2和如今的 Struts2.x中使用OGNL取代原来的EL来作界面数据绑定,所谓界面数据绑定,也就是把界面元素(例如一个textfield,hidden)和对象层某个类的某个属性绑定在一块儿,修改和显示自动同步。
struts1.x的formbean相比,这样作的好处很是明显:在 webwork中不须要为每一个页面专门写formbean,能够直接利用对象层的对象。例如在对象设计中,咱们的User和Person是分开的,而一个注册用户界面须要填写二者的内容,在webwork中,就能够保持后台的对象结构,把属于用户属性的界面元素用user.person.xxx绑定,把属于帐号属性的界面元素用user.xxx绑定。

在struts2中

OGNL(Object-Graph Navigation Language),能够方便地操做对象属性的开源 表达式语言,使页面更简洁;
支持 运算符(如+-*/),比普通的标志具备更高的自由度和更强的功能;
Struts 2默认的表达式语言是OGNL,缘由是它相对其它表达式语言具备下面几大优点:
支持对象方法调用,如xxx.doSomeSpecial();
支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名 | 值名],例如:@java.lang.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME;
支持赋值操做和 表达式串联,如price=100, discount=0.8, calculatePrice(price*discount),这个表达式会返回80;
访问OGNL上下文(OGNL context)和ActionContext;
操做集合对象。
能够直接new一个对象

具体用法:

#”主要有三种用途:
访问OGNL上下文和Action上下文,#至关于ActionContext.getContext();
下表有几个ActionContext中有用的属性: 名称 做用 例子
parameters 包含当前 HTTP请求参数的Map #parameters.id[0]做用至关于request.getParameterValues("id").get(0);
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) #attr.userName至关于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止
用于过滤和投影(projecting)集合,如books.{?#this.price<100};
 
(来自百度百科)
相关文章
相关标签/搜索