`

OGNL及其其中的#、%和$符号用法说明

    博客分类:
  • OGNL
 
阅读更多

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标签库中 `$`, `#`, `%` 的使用方法及其区别。 #### 二、Struts2.0 标签概述 ##### 1. 通用标签 - **Property** - 用于展示数据栈中的数据。 - 支持默认值设置。 - 可以控制HTML转义。...

    #和$的区别

    综上所述,了解Struts2框架中OGNL表达式的用法及其区别对于开发高质量的Web应用程序至关重要。“#”、“$”和“%”符号在不同的场景下发挥着各自独特的作用,合理运用这些符号能够显著提升应用程序的性能和用户体验...

    struts2中OGNL的一些概念及原理说明

    4. **OGNL的六种使用方法**:在实际应用中,OGNL表达式具有多种用途,包括但不限于: - **基本用法**:如上例所示,直接通过对象属性的方式来访问或设置数据。 - **转换为字符串**:有时需要将OGNL表达式的结果...

    ognl表达式的用法

    下面我们将深入探讨如何使用OGNL表达式及其在示例代码中的应用。 首先,让我们看看提供的示例代码片段。这段代码是一个基于JSP的Struts2应用,展示了如何使用OGNL表达式来访问不同范围内的属性(request、session、...

    ognl.rar_OGNL API_struts2 ognl api_struts2帮助文档

    2. **OGNL的特殊符号和运算符**:例如索引访问、属性访问、方法调用、算术运算、逻辑运算等。 3. **OGNL的安全性**:Struts2框架中,OGNL表达式可能受到输入的攻击,因此需要理解如何防止OGNL注入。 4. **OGNL...

    struts2中#号的用法

    本文将详细介绍`#`符号的使用方法及其应用场景,帮助读者更好地理解和掌握Struts2框架的相关知识。 #### 一、Struts2简介 Struts2是基于Struts1的基础上发展起来的一款开源Web应用框架,它使用MVC(Model-View-...

    struts2框架面试题及答案02

    根据给定的信息,我们将深入探讨Struts2框架中的一些核心概念,包括OGNL表达式的使用、ValueStack的理解及其数据存取方法,以及拦截器的生命周期等。 ### OGNL表达式及其三要素 #### OGNL简介 OGNL(Object-Graph ...

    传智168期JavaEE struts2杜宏 day32~day33笔记

    为了更好地理解OGNL在Struts2中的应用,可以通过具体的示例来展示其使用方法: 1. **对象方法调用**: ```xml ()"/&gt; ``` 这里使用了OGNL表达式`'abc'.length()`来计算字符串"abc"的长度。 2. **静态方法调用**:...

    Struts2页面取值总结

    4. **使用`#`符号**: 如`&lt;s:property value="#request.username"/&gt;`,这里`#request`表示访问HttpServletRequest对象,同样`#session`和`#application`分别代表HttpSession和ServletContext对象。 #### 核心标签...

    ssh+velocity+annotation包源

    - **模板语法**:Velocity使用#和$符号进行指令和变量引用,例如#{if}条件判断,${variable}变量输出。 - **Velocity上下文(Context)**:存储并传递数据到模板,是连接业务逻辑和视图的关键。 - **宏库(Macro ...

    面试题-全网最新的MyBatis面试题及答案

    - **执行原理**:使用 OGNL 表达式从 SQL 参数对象中计算表达式的值,根据表达式的值动态拼接 SQL 语句。 #### 6. #{}与${}的区别 - **#{}**:预编译处理,可有效防止 SQL 注入攻击。 - 在处理时,MyBatis 会将 ...

    spring+hibernate+struts2使用笔记

    根据给定文件的信息,我们可以总结出关于Spring、Hibernate与...以上就是Spring、Hibernate与Struts2框架使用与整合的主要知识点,通过这些知识点的学习和实践,可以帮助开发者更好地理解和掌握这些框架的使用方法。

    Tapestry用户手册

    - 描述了监听方法接收的参数类型及其含义。 - **4.3 调用监听方法** - 如何触发监听方法,以及在什么情况下应该调用这些方法。 #### 5. 决定页面(Page)类 - 页面类是定义页面行为的关键部分,包括页面的状态、...

    struts2经典教程

    - 访问复杂对象:OGNL支持使用点符号(.)或括号来访问对象的属性,即使这些属性嵌套得很深。 - ActionContext和ServletActionContext:这两个类提供了访问请求上下文的方法,对于处理请求时需要访问HTTP请求等...

    Struts面试题

    4. **OGNL访问**:使用OGNL表达式访问`ValueStack`中的内容时,不需要使用`#`符号。 5. **Struts2对request的重写**:为了更好地集成`ValueStack`,Struts2对`request`对象的`getAttribute`方法进行了重写,使得...

    深入浅出Struts_2

    - **使用模式匹配**:通过使用模式匹配符号(如`*`),可以更简洁地配置Action。 - **使用替代的URI映射方法**:除了默认的Action映射方式外,还可以使用通配符或其他映射策略。 - **了解拦截器的功能**:深入理解...

    struts2的基础知识及例子大全

    - **Using Pattern Matching in Configurations**(配置中的模式匹配):通过使用模式匹配符号,可以更加灵活地定义Action路径和映射规则。 - **Using Alternative URI Mapping Methods**(使用替代的URI映射方法...

    java最新面试宝典

    - HttpClient的基本使用方法。 - 请求与响应的处理。 - 连接池的管理。 - **面试考察要点:** - 如何使用HttpClient发送HTTP请求。 **三、Jsonp** - **知识点概述:** - JSONP的实现原理。 - JSONP与AJAX的...

Global site tag (gtag.js) - Google Analytics