淡茶 2011-02-10
Struts2支持以下几种表达式语言:
1.OGNL(Object-GraphNavigationLanguage),可以方便地操作对象属性的开源表达式语言;
2.JSTL(JSPStandardTagLibrary),JSP2.0集成的标准的表达式语言;
3.Groovy,基于Java平台的动态语言,它具有时下比较流行的动态语言(如Python、Ruby和Smarttalk等)的一些起特性;
4.Velocity,严格来说不是表达式语言,它是一种基于Java的模板匹配引擎,具说其性能要比JSP好。
Struts2默认的表达式语言是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上下文(OGNLcontext)和ActionContext;
5.操作集合对象。
OGNL是ObjectGraphNavigationLanguage的缩写,与JSP,JSF相比,OGNL是一种功能非常强大的针对Java的表达式语言(EL),它可用来读取和更新Java对象的属性。
OGNL可以用在以下方面:
-用做数据绑定语言用来绑定GUI元素(textfield,combobox等)到模型对象
-用做数据源语言用来映射数据库表到表模型对象
-用做数据绑定语言用来绑定web组件到数据模型(WebOGNL,Tapestry,WebWork等)
-提供类似JakartaCommonsBeanUtils所提供的功能(读取Java对象的属性)
OGNL表达式语法:
Java标准类型:
bool类型:true,false
int类型:10,0xABCD等
long类型:100L
float类型:1.0,0.5F等
double类型:0.01D
char类型:'A','\uFFFF'等
字符串类型:"HelloWorld!"
null
OGNL独自类型:
例:10.01B,相当于java.math.BigDecimal
例:100000H,相当于java.math.BigInteger
OGNL表达式中能使用的操作符号:
OGNL表达式中能使用的操作符基本跟Java里的操作符一样,除了能使用+,-,*,/,++,--,==,!=,=等操作符之外,还能使用mod,in,notin等
变量的引用:
使用方法:#变量名
例:#this,#user.name
对静态方法或变量的访问:
@mypkg.MyClass@myVar
@mypkg.MyClass@myMethod()
读取变量值:
例:user.address.countryName
方法调用:
例:user.getName()
对象的创建:
newjava.net.URL("http://localhost/")
List表达式例:
{"green","red","blue"}
Map表达式例:
#{"key1":"value1","key2":"value2","key3":"value3"}
对map引用,例:map.key1
等等。
OGNL官方首页:
http://www.ognl.org/
OGNL官方文档(2.6.9)
OGNLLanguageGuide(2.6.9)
<@s.radioname="user.sex"value="%{user==null||user.sex==null?'true':user.sex}"list=r'#{"true":"男","false":"女"}'required="true"/>