OGNL是Object-Graph Navigation
Language的缩写,它是一种功能强大的表达式语言(Expression
Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功
能。它使用相同的表达式去存取对象的属性。
WebOGNL是一种构建以servlet为基础的组件化应用的web表现层框架,它的模板语言
建立在OGNL表达式的基础上,具有别的web层框架不能匹敌的适应性。
OGNL可以让我们用非常简单的表达式访问对象层,例如,当前环境的根对象为user1,则表达
式user1.person.address[0].province
可以访问到user1的person属性的第一个address的
province属性。
这种功能是模板语言的一个重要补充,象jsp2.0,velocity,jelly等等,都有类
似的功能,但是ognl比它们完善得多,而且以一个独立的lib出现,方便我们构建自己的框架。
webwork2和现在的Struts2.x中使用OGNL取代原来的EL来做界面数据绑定,所
谓界面数据绑定,也就是把界面元素(例如一个textfield,hidden)和对象层某个类的某个属性绑定在一起,修改和显示自动同步。
和struts1.x的formbean相比,这样做的好处非常明显:在webwork中不需要
为每个页面专门写formbean,可以直接利用对象层的对象。例如在对象设计中,我们的User和Person是分开的,而一个注册用户界面需要填写两
者的内容,在webwork中,就可以保持后台的对象结构,把属于用户属性的界面元素用person.xxx绑定,把属于账号属性的界面元素用
user.xxx绑定。
Struts2 ognl中的#、%和$符号用法说明
#、%和$符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分。
在这里笔者简单介绍它们的相应用途。
1.#符号的用途一般有三种。
1)访问非根对象属性,例如示例中的#session.msg表达式,由于Struts
2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。实际上,#相当于ActionContext.
getContext();#session.msg表达式相当于ActionContext.getContext().getSession().
getAttribute(”msg”) 。
2)用于过滤和投影(projecting)集合,如示例中的persons.{?#this.age>20}。
3)用来构造Map,例如示例中的#{'foo1':'bar1','foo2':'bar2'}。
2.%符号
%符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。如下面
的代码所示:
构造Map
<s:set name="foobar"
value="#{'foo1':'bar','foo2':'bar2'}" />
<p>The value of key "foo1" is
<s:property value="#foobar['foo1']" /></p>
<p>不使用%:<s:url
value="#foobar['foo1']" /></p>
<p>使用%:<s:url
value="%{#foobar['foo1']}" /></p>
3.$符号
$符号主要有两个方面的用途。
在国际化资源文件中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在${min}
同${max}之间。
在Struts 2框架的配置文件中引用OGNL表达式,例如下面的代码片断所示:
<validators>
<field name=”intb”>
<field-validator
type=”int”>
<param name=”min”>10</param>
<param name=”max”>100</param>
<message>BAction-test校验:数字必须为${min}为${max}之间!</message>
</field-validator>
</field>
</validators>
原文链接:http://blog.csdn.net/pengyouchuan/archive/2009/01/05/3712933.aspx
http://blog.csdn.net/pengyouchuan/archive/2009/01/05/3712940.aspx
分享到:
相关推荐
本文将详细介绍Struts2.0标签库中 `$`, `#`, `%` 的使用方法及其区别。 #### 二、Struts2.0 标签概述 ##### 1. 通用标签 - **Property** - 用于展示数据栈中的数据。 - 支持默认值设置。 - 可以控制HTML转义。...
综上所述,了解Struts2框架中OGNL表达式的用法及其区别对于开发高质量的Web应用程序至关重要。“#”、“$”和“%”符号在不同的场景下发挥着各自独特的作用,合理运用这些符号能够显著提升应用程序的性能和用户体验...
4. **OGNL的六种使用方法**:在实际应用中,OGNL表达式具有多种用途,包括但不限于: - **基本用法**:如上例所示,直接通过对象属性的方式来访问或设置数据。 - **转换为字符串**:有时需要将OGNL表达式的结果...
下面我们将深入探讨如何使用OGNL表达式及其在示例代码中的应用。 首先,让我们看看提供的示例代码片段。这段代码是一个基于JSP的Struts2应用,展示了如何使用OGNL表达式来访问不同范围内的属性(request、session、...
2. **OGNL的特殊符号和运算符**:例如索引访问、属性访问、方法调用、算术运算、逻辑运算等。 3. **OGNL的安全性**:Struts2框架中,OGNL表达式可能受到输入的攻击,因此需要理解如何防止OGNL注入。 4. **OGNL...
本文将详细介绍`#`符号的使用方法及其应用场景,帮助读者更好地理解和掌握Struts2框架的相关知识。 #### 一、Struts2简介 Struts2是基于Struts1的基础上发展起来的一款开源Web应用框架,它使用MVC(Model-View-...
根据给定的信息,我们将深入探讨Struts2框架中的一些核心概念,包括OGNL表达式的使用、ValueStack的理解及其数据存取方法,以及拦截器的生命周期等。 ### OGNL表达式及其三要素 #### OGNL简介 OGNL(Object-Graph ...
为了更好地理解OGNL在Struts2中的应用,可以通过具体的示例来展示其使用方法: 1. **对象方法调用**: ```xml ()"/> ``` 这里使用了OGNL表达式`'abc'.length()`来计算字符串"abc"的长度。 2. **静态方法调用**:...
4. **使用`#`符号**: 如`<s:property value="#request.username"/>`,这里`#request`表示访问HttpServletRequest对象,同样`#session`和`#application`分别代表HttpSession和ServletContext对象。 #### 核心标签...
- **模板语法**:Velocity使用#和$符号进行指令和变量引用,例如#{if}条件判断,${variable}变量输出。 - **Velocity上下文(Context)**:存储并传递数据到模板,是连接业务逻辑和视图的关键。 - **宏库(Macro ...
- **执行原理**:使用 OGNL 表达式从 SQL 参数对象中计算表达式的值,根据表达式的值动态拼接 SQL 语句。 #### 6. #{}与${}的区别 - **#{}**:预编译处理,可有效防止 SQL 注入攻击。 - 在处理时,MyBatis 会将 ...
根据给定文件的信息,我们可以总结出关于Spring、Hibernate与...以上就是Spring、Hibernate与Struts2框架使用与整合的主要知识点,通过这些知识点的学习和实践,可以帮助开发者更好地理解和掌握这些框架的使用方法。
- 描述了监听方法接收的参数类型及其含义。 - **4.3 调用监听方法** - 如何触发监听方法,以及在什么情况下应该调用这些方法。 #### 5. 决定页面(Page)类 - 页面类是定义页面行为的关键部分,包括页面的状态、...
- 访问复杂对象:OGNL支持使用点符号(.)或括号来访问对象的属性,即使这些属性嵌套得很深。 - ActionContext和ServletActionContext:这两个类提供了访问请求上下文的方法,对于处理请求时需要访问HTTP请求等...
4. **OGNL访问**:使用OGNL表达式访问`ValueStack`中的内容时,不需要使用`#`符号。 5. **Struts2对request的重写**:为了更好地集成`ValueStack`,Struts2对`request`对象的`getAttribute`方法进行了重写,使得...
- **使用模式匹配**:通过使用模式匹配符号(如`*`),可以更简洁地配置Action。 - **使用替代的URI映射方法**:除了默认的Action映射方式外,还可以使用通配符或其他映射策略。 - **了解拦截器的功能**:深入理解...
- **Using Pattern Matching in Configurations**(配置中的模式匹配):通过使用模式匹配符号,可以更加灵活地定义Action路径和映射规则。 - **Using Alternative URI Mapping Methods**(使用替代的URI映射方法...
- HttpClient的基本使用方法。 - 请求与响应的处理。 - 连接池的管理。 - **面试考察要点:** - 如何使用HttpClient发送HTTP请求。 **三、Jsonp** - **知识点概述:** - JSONP的实现原理。 - JSONP与AJAX的...