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两个属性;<s:property value=“username”/>
<s:property value=“password”/>

2、Action中有User对象
<s:property value="user.username"/>

3、Action中有Cat对象,Cat对象有个friend属性是Dog对象,Dog有名字属性;
<s:property value="cat.friend.name"/>

OGNL访问值栈中对象方法

1、访问值栈中对象的普通方法
<s:property value="username.length()"/>
<s:property value="cat.say()"/>

2、访问值栈中Action的普通方法
<s:property value="methodName()"/>

3、访问普通类的构造方法(new 对象)
<s:property value="new 构造方法()"/>

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

1、访问静态方法
<s:property value="@全类名@静态方法名()"/>
注意:访问静态方法要配置常量
<constant name="struts.ognl.allowStaticMethodAccess" 
value="true"/>

2、访问静态属性
<s:property value="@全类名@静态属性"/>

3、特例---------访问Math类的方法
<s:property value="@@静态方法()"/>

OGNL访问集合

1、List集合(数组与List通用)
访问整个List
<s:property value="users"/>

访问List中某个元素
<s:property value="users[0]"/>

访问List中元素某个属性的集合
<s:property value="users.{age}"/>

访问List中元素某个属性的集合中的特定值
<s:property value="users.{age}[0]"/>

<s:property value="users[0].age"/>

2、Set集合
访问整个Set
<s:property value="users"/>
访问Set中的某个元素
<s:property value="users[1]"/> 无法取到数据,因为Set集合是无序的。

3、Map集合
访问Map
<s:property value="usersMap"/>
访问Map中的某个元素
<s:property value="usersMap.keyName"/>

<s:property value="usersMap['keyName']"/>

<s:property value="usersMap[\"keyName\"]"/>

访问Map中所有的键
<s:property value="usersMap.keys"/>
访问Map中所有的值
<s:property value="usersMap.values"/>

OGNL投影(projecting)

<s:property value="users.{?#this.age==1}"/> ------?表示所有的
<s:property value="users.{^#this.age>1}"/>  -------^表示第一个
<s:property value="users.{$#this.age>1}"/> -------$表示最后一个

: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,例如<s:set name="foobar" value="#{'foo1':'bar1', 'foo2':'bar2'}" />

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

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值