天天看点

Webwork 学习之路(二)前端OGNL试练

<b>阅读目录</b>

<a href="http://www.cnblogs.com/java-class/p/5016578.html#_label0">1.ognl 出现的意义</a>

<a href="http://www.cnblogs.com/java-class/p/5016578.html#_label1">2.ognl项目实战</a>

   在mvc中,数据是在各个层次之间进行流转是一个不争的事实。而这种流转,也就会面临一些困境,这些困境,是由于数据在不同世界中的表现形式不同而造成的:

a. 数据在页面上是一个扁平的,不带数据类型的字符串,无论你的数据结构有多复杂,数据类型有多丰富,到了展示的时候,全都一视同仁的成为字符串在页面上展现出来。

b. 数据在java世界中可以表现为丰富的数据结构和数据类型,你可以自行定义你喜欢的类,在类与类之间进行继承、嵌套。我们通常会把这种模型称之为复杂的对象树。此时,如果数据在页面和java世界中互相流转传递,就会显得不匹配。所以也就引出了几个需要解决的问题;

c. 当数据从view层传递到controller层时,我们应该保证一个扁平而分散在各处的数据集合能以一定的规则设置到java世界中的对象树中去。同时,能够聪明的进行由字符串类型到java中各个类型的转化;

d. 当数据从controller层传递到view层时,我们应该保证在view层能够以某些简易的规则对对象树进行访问。同时,在一定程度上控制对象树中的数据的显示格式。

     如果我们稍微深入一些来思考这个问题,我们就会发现,解决数据由于表现形式的不同而发生流转不匹配的问题对我们来说其实并不陌生。同样的问题会发生在java世界与数据库世界中,面对这种对象与关系模型的不匹配,我们采用的 解决方法是使用orm框架,例如hibernate,ibatis等等。那么现在,在web层同样也发生了不匹配,所以我们也需要使用一些工具来帮助我们解决问题。为了解决数据从view层传递到controller层时的不匹配性,struts2采纳xwork     的一套完美方案。并且在此的基础上,构建了一个完美的机制,从而比较完美的解决了数据流转中的不匹配性。ognl方案就应运而生

   ognl是object-graph navigation language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,

遍历整个对象的结构图,实现字段类型转化等功能。

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

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

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

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

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

f .访问ognl上下文(ognl context)和actioncontext

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

h.ognl支持类似数据库中的投影(projection) 和选择(selection)。

投影就是选出集合中每个元素的相同属性组成新的集合,类似于关系数据库的字段操作。投影操作语法为 collection.{xxx},其中xxx 是这个集合中每个元素的公共属性。

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

? 选择满足条件的所有元素

^ 选择满足条件的第一个元素

$ 选择满足条件的最后一个元素

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

Webwork 学习之路(二)前端OGNL试练
Webwork 学习之路(二)前端OGNL试练

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

如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】 

如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】 

如果,您对我的博客内容感兴趣,请继续关注我的后续博客,我是【orson】 

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段 声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 

转载:http://www.cnblogs.com/java-class/p/5016578.html