传智播客--struts2.x之OGNL

来源:互联网 发布:淘宝图片轮播大小制作 编辑:程序博客网 时间:2024/05/22 01:39

今天是struts2的重点了,OGNL的讲解了.把这个学习好了,struts2就能掌握好一大半了.嘿嘿,不过得好好努力学习和练习代码了.

1.OGNL的基本概念
OGNL(对象图导航语言,Object Graph Navigation Language)是一种用于从ValueStack对象与其关联的Context上下文中获取的值的表达式
基本语法:
1)可以用#key的形式访问OGNL Context对象中的各个key对应的对象,并可以采用点(.)操作符进行多级导航调用对象的属性和方法,例如,#application、#session.attr1、#key1.sayHello();对于map对象,map.attr不是 map.getAttr()方法,而是表示map.get(“attr1”)。 
2)如果要访问根对象的属性或方法,则可以省略#key,直接访问该对象的属性和方法。 struts2修改了OGNL表达式的默认属性访问器,它不是直接访问根对象ValueStack的属性或方法,而是在ValueStack内部的堆栈中所有对象上逐一查找该属性或方法,搜索顺序是从栈顶对象开始寻找,依次往下,直到找到为止,例如,sayHello()表示调用堆栈中某个对象的 sayHello()方法。
3)如果引用名前面没有#,且valueStack中存储的各个对象没有该属性,则把该名称当作 Context对象中的某个key来检索对应的对象,但这种方式不支持点(.)操作符。
4)#parameter.id[0]”或”#parameter[‘id’][0]”访问名称为id的请求参数。
 
2.Locale的获取
先从request中得到valueStack,再从 ValueStack获得context,再从context中用[]的方式获取。
支持类静态方法调用和属性访问
表达式的格式为@[类全名(包括包路径)]@[方法名 |  值名],
例如:@java.lang.String@format(‘foo %s’, ‘bar’)或@cn.itcast.Constant@APP_NAME;
session.attribute[“foo”]等效于 session.getAttribute(“foo”)方法。
 
3.OGNL表示大整数
<s:property value="%{1111111111111111111111H.bitLength()}"/>,而在java中则不能直接写 1111111111111111111111这么大的整数。
操作:
<s:property value=“110H.intValue().(#this<112?#this*2:#this/2)”/>
 
4.Struts2 特殊功能
[n]表示从原来堆栈中截取一个子堆栈并对这个子堆栈进行操作,子堆栈为原始堆栈的栈顶开始的索引号为n的元素一直到栈底.
例如,[1].age表示从原始堆栈中的索引号为1的对象(即第二个对象)开始查找age属性,以找到的第一个为准。
top表示 ValueStack栈顶的对象,[0].top和top表示同一个对象。
 
5.集合对象的操作
{}创建List集合
<s:set value=“{1,3,5,7}” var=“list”/>
创建数组
<s:set value=“new int[]{1,3,5,7}” var=“array”/>
<s:set value=“new int[4]” var=“array”/>
#{}创建Map集合对象
各个元素之间用逗号分隔,元素的key和value之间采用冒号分隔
<s:set value=“#{‘lhm’:96,’zxx’:93,’xpc’:97}”
<s:set value=“#@java.util.LinkedHashMap@{‘lhm’:96,’zxx’:93,’xpc’:97}”
in与 not in操作符用于判断某个值是否位于某个集合中。
集合伪属性:size/isEmpty/iterator/keys/values /next/hasNext
 
6.投影
集合中的每个元素去进行运算,各个元素运算的结果组成一个新集合,新集合中的元素个数与原始集合中的元素个数相同。
<s:property value=“persons.{name}”/>
<s:property value=“{5,3,2}.{#this*2}”/>
 
7.过滤
集合中的每个元素去进行布尔运算,运算的结果为 true,则将该元素保存到新集合中去。
?:获得所有符合逻辑的元素。
<s:property value=“{5,3,2}.{? #this }”/>
^:获得符合逻辑的第一个元素。
<s:property value=“{5,3,2}.{^ #this>3 }”/>
$:获得符合逻辑的最后一个元素。
<s:property value=“{5,3,2}.{$ #this>2 }”/>
 
8.类型转换
转换成boolean类型
    整数0转换为false
    值为0的字符转化为false
    Null对象转化为false
投影和选择操作符 (e1.{e2} and e1.{?e2})前面的内容会被转换成集合
    Map会被转化成其values属性返回的集合
    数字会被转换成从0开始到比该数字小1的所有数字的集合。
    单个对象被转换成仅仅只含有该对象的集合。
 
9.在配置文件中使用OGNL
在struts2的各种配置文件中也可以使用OGNL,只需要将OGNL表达式套在${}中,即${ognl表达式}。

原创粉丝点击