1.webwork2 EL:表达式语言;OGNL:对象导航图语言
2.使用表达式语言的目的就是消除重复代码使程序变得更简单,使表现层的代码更简单。
3.OGNL和EL的用法:
OGNL使用小结(一)
最近一直使用struts2,表现层采用JSP,用的struts2标签,支持OGNL。 OGNL中的# $ %使用场景:
1、“#”主要有三种用途:
- 访问OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性:
名称 |
作用 |
例子 |
parameters |
包含当前HTTP请求参数的Map |
#parameters.id[0]作用相当于request.getParameter("id") |
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'}。
2、“%”符号的用途
在标志的属性为字符串类型时,计算OGNL表达式的值。例如在Ognl.jsp中加入以下代码:
[size=13px]<hr />
<h3>%的用途</h3>
<p><s:url value="#foobar['foo1']"
/></p>
<p><s:url value="%{#foobar['foo1']}"
/></p>
清单6 演示%用途的代码片段
3、“$”有两个主要的用途
- 用于在国际化资源文件中,引用OGNL表达式,例子请参考《在Struts 2.0中国际化(i18n)您的应用程序》
- 在Struts 2配置文件中,引用OGNL表达式,如 <action name="AddPhoto" class="addPhoto">
<interceptor-ref name="fileUploadStack" />
<result type="redirect">ListPhotos.action?albumId=${albumId}</result>
</action>
OGNL使用小结(二)
1、OGNL除了支持所有的Java操作符外,还支持以下几种:
1、逗号,
与C语言中的逗号操作符类似。
2、花括号{}
用于创建列表,元素之间用逗号分隔。
3、in和not in
用于判断一个值是否在集合中。
2、访问静态方法和静态字段
@class@method(args) //调用静态方法
@class@field //调用静态字段
其中class必须给出完整的类名(包括包名),如果省略class,那么默认使用的类是java.util.Math,如:
@@min(5,3)
@@max(5,3)
@@PI
3、索引访问
OGNL支持多种索引方式的访问。
1、数组和列表索引
在OGNL中,数组和列表可以大致看成是一样的。
如:array[0]、list[0]。表达式:{’zhangsan’,'lisi’,'wangwu’}[1]等。
2、JavaBean的索引属性
要使用索引属性,需要提供两对setter和getter方法,一对用于数组,一对用于数组中的元素。
如:有一个索引属性interest,它的getter和setter如下
public String[] interest;
public String[] getInterest(){ return interest;}
public void setInterest(String[] interest){ this.interest=interest;}
public String getInterest(int i){ return interest[i]}
public void setInterest(int i, String newInterest){ interest[i]=newInterest;}
对于表达式interest[2],OGNL可以正确解释这个表达式,调用getInterest(2)方法。如果是设置的情况下,会调用setInterest(2,value)方法。
3、OGNL对象的索引属性
JavaBean的索引属性只能使用整型作为索引,OGNL扩展了索引属性的概念,可以使用任意的对象来作为索引。
4、对集合进行操作
1、创建集合:
创建列表
使用花括号将元素包含起来,元素之间使用逗号分隔。如{’zhangsan’,'lisi’,'wangwu’}
创建数组
OGNL中创建数组与Java语言中创建数组类似。
创建Map
Map使用特殊的语法来创建 #{”key”:value, ……}
如果想指定创建的Map类型,可以在左花括号前指定Map实现类的类名。如:
#@java.util.LinkedHashMap@{”key”:”value”,….}
Map通过key来访问,如map["key"]或map.key。
2、投影
OGNL提供了一种简单的方式在一个集合中对每一个元素闻调用相同的方法,或者抽取相同的属性,并将结果保存为一个新的集合,称之为投影。
假如employees是一个包含了employee对象的列表,那么
#employees.{name}将返回所有雇员的名字的列表。
在投影期间,使用#this变量来引用迭代中的当前元素。
如:objects.{#this instanceof String? #this: #this.toString()}
3、选择
OGNL提供了一种简单的方式来使用表达式从集合中选择某些元素,并将结果保存到新的集合中,称为选择。
如#employees.{?#this.salary>3000}
将返回薪水大于3000的所有雇员的列表。
#employees.{^#this.salary>3000}
将返回第一个薪水大于3000的雇员的列表。
#employees.{$#this.salary>3000}
将返回最后一个薪水大于3000的雇员的列表。
5、lambda表达式
lambda表达式的语法是: :[...]。OGNL中的lambda表达式只能使用一个参数,这个参数通过#this引用。
如:
#fact= :[ #this<=1 ? 1 : #this* #fact ( #this-1) ], #fact(30)
#fib= :[#this==0 ? 0 : #this==1 ? 1 : #fib(#this-2)+#fib(#this-1)], #fib(11)
分享到:
相关推荐
- **表达式与EL和OGNL**:OGNL是Xwork提供的强大表达式语言,可以方便地进行数据操作和访问。 #### 拦截器框架 拦截器(Interceptor)是WebWork中的另一个重要概念,它可以在Action执行前后进行拦截,从而实现如...
WebWork教程-表达式与言EL和OGNL- babydavic(王汉祥)的专栏- CSDNBlog.zipWebWork教程-表达式与言EL和OGNL- babydavic(王汉祥)的专栏- CSDNBlog.zip
此外,还涵盖了ResultType(结果类型)的使用、表达式语言EL和OGNL的介绍以及值堆栈(OgnlValueStack)的概念。WebWork的拦截器(Interceptor)框架和验证框架也是教程的重要内容,它们允许开发者在运行时添加额外的...
3. **表达式语言**:WebWork可能使用某种表达式语言(EL),如OGNL(Object-Graph Navigation Language),用于在视图层与模型数据交互。`ognl.jar`包含了OGNL的实现,使得开发者可以通过简洁的语法访问和操作对象...
在JSP中,你可以使用EL(Expression Language)和JSTL标签来获取Action传递的数据,并显示出来。例如,如果Action将“message”属性设置为“Hello, World!”,你可以在JSP中写入`${message}`来显示这个信息。 在...
WebWork还提供了强大的标签库和EL(Expression Language)支持,使得在视图层可以更方便地操作模型数据。此外,WebWork与其他知名的Java Web框架,如Spring Web Framework、Struts、Tapestry和JSF等相比,各有其特色...
5. **ValueStack**:WebWork的ValueStack是数据绑定的核心,它是一个对象栈,可以将Action的属性和JSP标签中的EL表达式关联起来,简化视图层的数据传递。 6. **配置管理**:WebWork使用XML配置文件定义Action的映射...
WebWork完全教程 ...本教程涵盖了 WebWork 框架的安装、Action、ActionContext、ServletDispatcher、单元测试、Result Type、EL 和 OGNL 等知识点,旨在帮助开发者快速掌握 WebWork 框架的使用和开发。
**表达式语言** 包括EL(Expression Language)和OGNL(Object Graph Navigation Language)。OGNL是一种强大的表达式语言,用于读取和设置对象属性。 #### 八、Interceptor框架与验证框架 - **Interceptor框架** ...
- **EL介绍**:讲解WebWork支持的表达式语言(Expression Language),包括其语法特点和使用场景。 - **数据访问**:展示如何利用EL来访问动作中的数据成员或调用方法。 #### 9. 标签库 - **自定义标签**:介绍...
这些实例可能涉及到Action的编写、拦截器的定制以及如何利用WebWork的标签库和EL表达式。 5. **内训演示程序**: 提供的`webworkDemo.rar`可能包含了一个完整的WebWork演示应用,它可以帮助学习者亲手实践,进一步...
此外,WebWork还支持EL(Expression Language)表达式,这是一种强大的语法,用于在JSP页面中访问和操作数据。结合标签库,EL表达式可以帮助开发者编写出简洁且可读性强的JSP代码。 WebWork标签库CHM文件的内容可能...
3. **值栈(Value Stack)**:WebWork的值栈是模型层的重要组成部分,它将动作类的属性与视图层的JSP页面中的EL(表达式语言)和JSTL(JavaServer Pages Standard Tag Library)关联起来,简化了数据传递。...
总的来说,WebWork培训资料涵盖了从入门到深入的多个方面,包括WebWork的基本概念、核心原理、标签库和EL的使用,以及通过实例学习如何使用WebWork进行实际开发。通过这样的培训,学员可以系统地掌握WebWork框架,...
WebWork的标签库和表达式语言(EL)是其高效开发的关键。 - **WebWork标签库**:提供了一系列预定义的HTML标签,简化了页面的开发过程,如数据绑定、条件判断和循环等。 - **表达式语言(EL)**:是一种用于访问...
它们通常与动作类配合工作,通过表达式语言(EL)和标签库定义文件(TLD)来定义和使用。例如,`<ww:property>`标签用于显示动作属性的值,`<ww:form>`标签用于创建表单,等等。使用WebWork标签,可以降低视图和控制...
Struts2采用OGNL(Object-Graph Navigation Language)作为默认的表达式语言,替代了WebWork的XWork EL。OGNL提供了一种强大的方式来访问和操作对象图,增强了模板和Action之间的数据绑定。 6. **更友好的API和...