ONGL表达式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36748278/article/details/78013232

OGNL是对象图导航语言(Object-Graph Navigation Languaged)的缩写,他是一种功能强大的表达式语言,通过简单一致的表达式语法,可以存取Java对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型的转化功能。他使用相同的表达式去存取对象的属性。如果吧表达式看作一个带有语义的字符串,那么OGNL无疑成为了这个语义字符串与java对象之间沟通的桥梁。


OGNL是通常要结合Struts 2的标志一起使用。主要是#、%和$这三个符号的使用。

#、%、$三个符号的主要用途

“#“符号主要有三种用途:
1、访问OGNL上下文和Action上下文(非根对象属性,值栈被视为跟对象,因此访问非跟对象的时候需要添加#前缀),#相当于ActionContext.getContext()
attr 用于按request > session > application顺序访问其属性(attribute),直到找到为止
2、用于过滤和投影(projecting)集合,如books.{?#this.price<100};
3、构造Map,如#{‘foo1’:’bar1’, ‘foo2’:’bar2’}。

“%”符号
%符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值,类似js中的eval

“$”符号主要有两种用途
1、用于在国际化资源文件中,引用OGNL表达式。
2、在Struts 2和i18n中配置文件


ONGL的一些基本用法:

1、访问属性

<s:property value="对象名.属性值" />

2、访问方法

<s:property value="对象名.方法名()" />

3、访问静态属性和方法

<s:property value="@类名@方法名()" />
<s:property value="@类名@属性名" />

4、访问数组、容器、对象
OGNL支持对数组和ArrayList等容器的顺序访问(Set集合不可以,因为它是无序的),即通过下标进行访问。

//List
<s:property value="testList" />                 //获取List
<s:property value="testList[index]" />          //获取List中索引为index的元素
<s:property value="testList.size" />            //获取List的大小

//Map
<s:property value="testMap" />                  //获取Map
<s:property value="testMap.keys" />             //获取Map中所有的键
<s:property value="testMap.values" />           //获取Map中所有的值
<s:property value="testMap[index]" />           //获取Map中索引为index的元素
<s:property value="testMap['key']" />           //获取Map中键为key的元素的值

//构造List或Map对象,主要用于表单select、radio、checkbox的生成
<s:radio list="#{'male':'男','female':'女'}" name="sex" label="性别" />
//运行结果是相当于之前标签的两个radio
<input type="radio" name="sex" id="sexmale" value="male"/>男
<input type="radio" name="sex" id="sexfemale" value="female"/>女

5、访问构造方法

6、投影、选择
OGNL支持类似数据库中的投影(projection) 和选择(selection)。
投影就是选出集合中每个元素的相同属性组成新的集合,类似于关系数据库的字段操作。投影操作语法为 collection.{XXX},其中XXX 是这个集合中每个元素的公共属性。

//语法:集合名.{表达式}
<s:iterator value="products.{name}" var="curproduct">       //只获得每个商品的名字进行显示
    <s:property value="#name" />
</s:iterator>

选择就是过滤满足selection 条件的集合元素,类似于关系数据库的纪录操作。
选择操作的语法为:collection.{X YYY},其中X 是一个选择操作符,后面则是选择用的逻辑表达式。而选择操作符有三种:
? 选择满足条件的所有元素
^ 选择满足条件的第一个元素
$ 选择满足条件的最后一个元素

<s:property value="products.{?#this.price >3000}" />    //选取所有价格大于3000的商品
<s:property value="products.{?#this.price >3000}.{name}" />     //选取所有价格大于3000的商品的名称
<s:property value="products.{?#this.price >3000}.{name}[0]" />  //选取所有价格大于3000的第一个商品
展开阅读全文

没有更多推荐了,返回首页