- 浏览: 62455 次
- 性别:
- 来自: 广州
文章分类
最新评论
8.2 Struts 2的OGNL
OGNL是Struts 2框架的默认表达式语言,增强了Struts 2的数据访问能力,同时简化了代码。
8.2.1 Struts 2的OGNL表达式
标准的OGNL会设定一个根对象(root对象)。假设使用标准OGNL表达式来求值(不使用Struts 2的OGNL表达式),如果OGNL上下文(OgnlContext Map类型)有两个对象:foo对象,在OgnlContext中名称为foo;bar对象,在OgnlContext中名称为bar。同时foo对象被设置为根对象(root)。则利用下面的OGNL表达式求值:
// 返回foo.getBlah()
#foo.blah
//返回bar.getBlah()
#bar.blah
//返回foo.getBlah() ,因为foo为根对象
blah
★ 说明 ★
使用OGNL是非常简单的,如果要访问的对象不是根对象,如示例中的bar对象,则需要使用命名空间,用“#”来标识,如“#bar”;如果访问一个根对象,则不用指定命名空间,可以直接访问根对象的属性。
在Struts 2框架中,值栈(Value Stack)就是OGNL的根对象,假设值栈中存在两个对对象实例:Man和Animal,这两个对象实例都有一个name属性,Animal有一个species属性,Man有一个salary属性,假设Animal在值栈的顶部,Man在Animal后面,下面的代码片断会帮助读者更好地理解OGNL表达式:
// 调用animal.getSpecies()
species
// 调用man.getSalary()
salary
// 调用animal.getName(),因为Animal位于值栈的顶部
name
最后一行示例代码,返回的是animal.getName()返回值,即返回了Animal的name属性,因为Animal是值栈的顶部元素,OGNL将从顶部元素搜索,所以会返回Animal的name属性值。如果要获得Man的name值,则需要如下代码:
man.name
Struts 2允许在值栈中使用索引,示例代码如下所示:
[0].name // 调用animal.getName()
[1].name // 调用man.getName()
★ 说明 ★
使用索引,并不是直接获得指定的元素,而是从指定的索引位置搜索。
Struts 2中的OGNL Context是ActionContext,如图8.2所示。
图8.2 Struts 2的OGNL Context结构示意图
★ 说明 ★
图8.2只是说明Struts 2的OGNL Context结构,实际上Context还包含其他对象。
由于值栈是Struts 2中OGNL的根对象,如果用户需要访问值栈中的对象,则可以直接通过下面的代码访问值栈中的属性:
//获得值栈中的foo属性
${foo}
如果访问其他Context中的对象,由于不是根对象,在访问时,需要加#前缀。
application对象:用于访问ServletContext,例如#application.userName或者#application['userName'],相当于调用Servlet的getAttribute("username")。
session对象:用来访问HttpSession,例如#session.userName或者#session['userName'],相当于调用session.getAttribute("userName")。
request对象:用来访问HttpServletRequest属性(attribute)的Map,例如#request.userName或者#request['userName'],相当于调用request.getAttribute("userName")。
parameters对象:用于访问HTTP的请求参数,例如#parameters.userName或者#parameters['userName'],相当于调用request.getParameter("username")。
attr对象:用于按page-request-session-application顺序访问其属性。
8.2.2 OGNL的集合操作
如果需要一个集合元素的时候(例如List对象或者Map对象),可以使用OGNL中同集合相关的表达式。
可以使用如下代码直接生成一个List对象:
{e1,e2,e3…}
该OGNL表达式中,直接生成了一个List对象,该List对象中包含3个元素:e1、e2和e3。如果需要更多的元素,可以按照这样的格式定义多个元素,多个元素之间使用逗号隔开。
如下代码可以直接生成一个Map对象:
#{key1:value1,key2:value2,…}
Map类型的集合对象,使用key-value格式定义,每个key-value元素使用冒号标识,多个元素之间使用逗号隔开。
对于集合类型,OGNL表达式可以使用in和not in两个元素符号。其中,in表达式用来判断某个元素是否在指定的集合对象中;not in判断某个元素是否不在指定的集合对象中,如代码8.3所示。
代码8.3 使用OGNL集合操作符
<s:if test="'foo' in {'foo','bar'}">
muhahaha
</s:if>
<s:else>
boo
</s:else>
<s:if test="'foo' not in {'foo','bar'}">
muhahaha
</s:if>
<s:else>
boo
</s:else>
除了in和not in之外,OGNL还允许使用某个规则获得集合对象的子集,常用的有以下3个相关操作符。
?:获得所有符合逻辑的元素。
^:获得符合逻辑的第一个元素。
$:获得符合逻辑的最后一个元素。
例如代码:
person.relatives.{? #this.gender == 'male'}
该代码可以获得person的所有性别为male的relatievs集合。
8.2.3 Lambda表达式
OGNL支持基本的Lambda表达式语法,通过Lambda表达式语法,可以在OGNL中使用一些简单的函数。例如:
Fibonacci:
if n==0 return 0;
elseif n==1 return 1;
else return fib(n-2)+fib(n-1);
fib(0) = 0
fib(1) = 1
fib(11) = 89
开发者可以使用Lambda表达式语法:
<s:property value="#fib =:[#this==0 ? 0 : #this==1 ? 1 : #fib(#this-2)+#fib(#this-1)], #fib(11)" />
发表评论
-
OGNL表达式 用法详解
2012-04-19 11:44 9024表达式通常用来访问页面中的各种变量,进行结果输出. s ... -
struts2.2.3最小jar
2011-07-18 11:32 1795struts2-core-2.2.3.jar :Struts ... -
转: struts2 标签 2
2011-07-05 11:41 1550一、概要:1、JSP标签技术始于JSP1.12、作用: ... -
转:struts2 标签
2011-07-05 11:39 932struts标签的继承 BodyTagSuppor ... -
struts.xml文件属性配置
2011-06-24 16:32 1226开发中发现struts还有co ... -
FilterDispatcher配置
2011-06-24 16:30 1354配置Struts 2的FilterDispatcher类时,可 ... -
struts.xml配置详解
2011-06-24 16:29 777地址:http://www.cnblogs.com/fmric ... -
struts.properties配置详解
2011-06-24 16:14 961在Struts2的核心包中org\apache\strut ... -
转:Struts 2 下载文件(12)下
2011-06-22 18:54 882(2)同时修改配置文件,增加一个input逻辑视图,修 ... -
转:Struts 2 下载文件(12)中
2011-06-22 18:53 77011.3.2 在Action中指定下载资源 前面的 ... -
转:Struts 2 下载文件(12)上
2011-06-22 18:52 108311.3 Struts 2控制文件下载 文件下载相对于 ... -
转: Struts 2多文件上传(11)下
2011-06-22 18:51 844(3)在配置文件中增加如下配置: ... -
转: Struts 2多文件上传(11) 上
2011-06-22 18:50 87111.2 多个文件上传 很多应用都要求在一个界面中可以 ... -
转: struts 2专用表达式(10)上
2011-06-22 18:47 803OGNL是Object Graphic Navigat ... -
转: 数据校验功能-AJAX输入校验(9)下
2011-06-22 18:45 12117.4.4 建立JSP视图 建立一个reg-aja ... -
转: 数据校验功能-AJAX输入校验(9)中
2011-06-22 18:43 8887.4.2 建立业务控制器 建立一个简单的业务 ... -
转: 数据校验功能-AJAX输入校验(9)上
2011-06-22 18:41 9287.4 AJAX输入校验 Struts 2框架在使用客 ... -
转: Struts 2的拦截器(8)下
2011-06-22 18:39 860(3)在ch5包内建立一个业务控制器Reg,如代码5. ... -
转: Struts 2的拦截器(8)上
2011-06-22 18:39 748拦截器(Interceptor)是Struts 2的核 ... -
转: 应用Struts 2 的国际化支持特性(7)下
2011-06-22 18:37 793(4) 同样,success.jsp也使用了标签库,如 ...
相关推荐
虽然Struts2的Action仍然可以访问原始的请求和响应对象,但在大多数情况下,开发者可以利用Struts2提供的其他功能来替代直接访问`HttpServletRequest`和`HttpServletResponse`的需求。 #### 4. 可测试性的提升 - *...
10. **OGNL与拦截器**:Struts2的拦截器机制允许在执行Action之前或之后对数据进行处理,而OGNL则可以用来设置或读取这些数据。 总的来说,了解并熟练掌握OGNL是深入理解Struts2框架的关键。通过使用OGNL,开发者...
Struts2 OGNL表达式是Java开发中一个重要的知识点,尤其在Web应用程序设计中扮演着核心角色。OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,它被Struts2框架广泛用于视图层与模型层之间的数据...
10. **国际化与本地化**: Struts2提供了对多语言的支持,可以通过资源文件轻松实现界面的国际化。 使用Struts2核心jar包时,需要正确配置web.xml以启用Struts2框架,并在项目中引入相应的依赖。开发过程中,还需要...
struts jstl el表达式示例代码 struts jstl el 表达式 源码
Struts2 OGNL(Object-Graph Navigation Language)表达式是一种强大的、动态的数据绑定和脚本语言,广泛应用于Struts2框架中。它允许开发者在视图层与模型层之间灵活地传递数据,增强了MVC架构中的灵活性。本文将...
Struts2 OGNL表达式是Java Web开发中一个重要的概念,它是一种强大的对象图形导航语言(Object-Graph Navigation Language)。在Struts2框架中,OGNL被广泛用于视图层,作为数据绑定的主要手段,使得开发者能够方便...
struts2 OGNL表达式使用 OGNL(Object-Graph Navigation Language)是对象图导航语言,允许开发者在Struts2应用程序中访问和操作对象及其属性。下面是OGNL表达式的使用方法: 访问基本属性 1. 访问值栈中action的...
Struts2最新版本2.2.1中所设计的核心库文件,包括以下内容: struts2-core-2.2.1.jar:Struts2框架的核心类库。 xwork-core-2.2.1.jar:Xwork核心类库,Struts2在其上构建。 ognl-3.0.jar:对象图导航语言(Object ...
struts2 中 OGNL表达式的使用struts2 中 OGNL表达式的使用
5. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为默认表达式语言,用于在Action和视图之间传递数据。 6. **拦截器**:拦截器是Struts2的核心组件,用于处理请求、验证输入、事务管理、日志...
其中,OGNL(Object-Graph Navigation Language)是Struts2中的核心表达式语言,用于数据绑定和表达式求值。这篇内容将深入探讨OGNL及其在Struts2中的应用,并解析其源码,帮助你更好地理解这一强大工具。 **1. ...
3. **依赖库**:Struts2依赖于其他一些开源库,例如ognl(Object-Graph Navigation Language)用于表达式语言,freemarker或velocity用于视图层的模板引擎,javassist用于动态类生成等。这些库被包含在不同名称的jar...
第四章:Struts2中的OGNL.ppt详细探讨了Struts2框架中使用OGNL(Object-Graph Navigation Language,对象图导航语言)的关键概念和技术。OGNL作为一种强大的表达式语言,使得开发者能够方便地访问Action携带的数据,...
"STRUTS2站点,STRUTS2学习实例10"很可能是针对Struts2框架的一个教学资源,旨在帮助开发者深入理解Struts2的工作原理和实践应用。 在Struts2的学习实例10中,我们可能会涵盖以下几个核心知识点: 1. **Action类与...
5. **表达式语言(EL)和OGNL**:Struts2使用OGNL作为默认的表达式语言,用于在视图层与模型层之间传递数据。 6. **Struts2的生命周期**:包括初始化、请求处理、响应生成等阶段。 7. **Action的注解配置**:...
7. **OGNL(Object-Graph Navigation Language)**:Struts2的默认表达式语言,用于在Action与视图之间传递数据。在JSP页面中,可以通过OGNL访问Action的属性。 8. **Validation框架**:Struts2提供了强大的表单...
10. **测试支持**:Struts2提供了测试框架,如Struts2 TestNG插件,方便进行单元测试和集成测试,确保应用的正确性。 综上所述,Struts2的核心包和IO包是构建基于Struts2的应用程序不可或缺的部分,它们为开发者...
10. **S2-005安全漏洞**:Struts2-showcase还包含了一些已知的安全漏洞实例,用于教育开发者如何避免和修复这些漏洞。 通过深入研究和分析struts2-showcase项目,开发者能够全面了解Struts2的特性和最佳实践,从而...