Struts 2中OGNL的使用

时间:2017-07-30 13:16

本人是一个EL(Expression Language,以下译为表达式语言)的支持者。因为我对<% %>写法极为反感,忘记了在那本书上看到的一句话——“使用标志(Tag)的一个目的就是避免在JSP页面中出现过多的<%%>的语句,使页面与后台代码分离。”

表达式语言主要有以下几大好处:

避免(MyType) request.getAttribute()myBean.getMyProperty()之类的语句,使页面更简洁;

支持运算符(如+-*/),比普通的标志具有更高的自由度和更强的功能;

简单明了地表达代码逻辑,使用代码更可读与便于维护。

Struts 2中的表达式语言

Struts 2支持以下几种表达式语言:

OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言;

JSTL(JSP Standard Tag Library),JSP 2.0集成的标准的表达式语言;

Groovy,基于Java平台的动态语言,它具有时下比较流行的动态语言(如Python、Ruby和Smarttalk等)的一些起特性;

Velocity,严格来说不是表达式语言,它是一种基于Java的模板匹配引擎,具说其性能要比JSP好。

Struts 2默认的表达式语言是OGNL,原因是它相对其它表达式语言具有下面几大优势:

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

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

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

访问OGNL上下文(OGNL context)和ActionContext;

操作集合对象。