欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Webwork 学习之路【02】前端OGNL试练-2.OGNL项目实战

最编程 2024-02-09 19:27:17
...

   OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,
遍历整个对象的结构图,实现字段类型转化等功能。

a. OGNL可以让我们用非常简单的表达式访问对象层【OGNL支持对Map的按键值查找】

<ww:property value='user.name' /> 可以直接点对象的属性,

如user 属性是list,<ww:property value='user[0].name' /> 可以获取第一个user对象的 name

如user 属性是一个 map <ww:property value='user[name]' /> 获取user "name" key 对应的 value

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

<ww:property value="100 - wcjd"/>

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

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

<ww:property value="#DateUtil.getNowdate(\"yyyy-MM-dd\")"/>

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

f .访问OGNL上下文(OGNL context)和ActionContext

g.你也可以通过任意类对象的构造函数进行对象新建

/**
new Java.net.URL("xxxxxx/")
**/

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

/**
group.userList.{username}将获得某个group中的所有user的name的列表
**/ 

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

/**
group.userList.{? #txxx.xxx != null}将获得某个group中user的name不为空的user的列表
**/

i. OGNL是通常要结合Struts 2的标志一起使用,主要是#、%和$这三个符号的使用。使用方法如下:

/**
访问OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性:

parameters 包含当前HTTP请求参数的Map #parameters.id[0]作用相当于request.getParameterValues("id").get(0);

request 包含当前HttpServletRequest的属性(attribute)的Map #request.userName相当于request.getAttribute("userName")

session 包含当前HttpSession的属性(attribute)的Map #session.userName相当于session.getAttribute("userName")

application 包含当前应用的ServletContext的属性(attribute)的Map #application.userName相当于application.getAttribute("userName")

attr 用于按request > session > application顺序访问其属性(attribute) #attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止
用于过滤和投影(projecting)集合,
如books.{?#this.price<100};
构造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。

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

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

/**

j. OGNL 可以获取后台 action get()set() 方法 传送过来的数据灵活展示到前台


本文转自Orson博客园博客,原文链接:http://www.cnblogs.com/java-class/p/5016578.html,如需转载请自行联系原作者