`
serenity
  • 浏览: 62481 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

OGNL表达式 用法详解

 
阅读更多

表达式通常用来访问页面中的各种变量,进行结果输出.

struts2中共支持以下几种表达式语言(默认的是OGNL):

OGNL:可以方便地操作对象属性的开源表达式语言;

JSTL:(JSP Standard Tag Library):JSP2.0集成的标准表达式语言;

Groovy:基于Java平台的动态语言,它具有时下比较流行的动态语言的一些特性;

Velocity:一种基于Java的模板匹配引擎。

一、什么是OGNL

名称:全称是Object-Graph Navigation Language

用途:是一个用来获取 和设置 java对象属性的表达式语言。

应用场合:通过使用表达式语法导航对象图,而不是直接调用对象的获取和设置方法可以提供许多应用。比如在XML文件 或者脚本文件中嵌入OGNL表达式语法,在JSP页面 使用OGNL表达式语法。

操作对象:基于当前对象的上下文。

二、OGNL引用方式

属性名称:如对象user的属性username,可以使用user.username来获取.

方法调用:可以使用user.hashCode()返回当前对象的哈希码.

数组元素:对于userlist数组对象,可以使用userlist[0]来引用其中的某一个元素.

三、OGNL相对其他表达式语言具有下面几大优势

1)支持对象方法调用:如xxx.doSomeSpecial()

2)支持类静态的方法|值调用:格式为"@[类全名(包括包路径)]@[方法名|值名]"。如:

@java.lagn.String@format('foo%s','bar')--调用类静态方法

@tutorial.MyConstant@APP_NAME--访问类的静态值

3)支持赋值操作和表达式串联 :如price=100,discount=0.8,calculatePrice(),这个表达式会返回80

4)访问OGNL上下文 (OGNL context)和ActionContext

5)操作集合对象

 

四、使用OGNL表达式

1)要使用OGNL表达式,首先需要在web.xml中添加ActionContextCleanUp过滤器

<filter>

<filter-name>struts-cleanup</filter-name>

<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>

</filter>

<filter-mapping>

<filter-name>struts-cleanup</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

五、'#'运算符

用途一般有三种:

1)访问非根对象属性,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀 。实际上,#相当于ActionContext. getContext()。

parameters:包含当前HTTP请求参数的Map,#parameters.id[0],等价于request.getParameter("id");

request:包含当前HttpServletRequest的属性的Map,#request.userName,等价于request.getAttribute("username");

session:包含当前HttpSession的属性的Map,#session.userName,等价于session.getAttribute("username");

application:包含当前应用的ServletContext的属性的Map,#application.userName,等价于application.getAttribute("username");

attr:用于按request→session→application顺序访问某个属性,#attr.userName,等价于按顺序在request,session,application范围内读取userName属性,直到找到为止。

2)用于过滤和投影(projecting)集合

如person.{?#this.age>20}

--获取集合中所有满足选择逻辑的对象(拿sql来做比例就是"select * from xxx where age>20")

--获取集合中第一个满足选择逻辑的对象(拿sql来做比例就是"select top(1) from xxx where age>20")

--获取集合中最后一个满足选择逻辑的对象

3) 用来构造Map

如#{'foo1':'bar1', 'foo2':'bar2'}

六、'%'运算符

用途是在标识的属性为字符串类型时,计算OGNL表达式的值,如:

<s:url value="test.jsp?age=#userlist['admin']">→test.jsp?#userlist['admin']---可见当字符串与OGNL表达式串起来时,只会被当作字符串对待,并不执行

<s:url value="test.jsp?age=%{#userlist['admin']}">→test.jsp?age=44---使用了该符号,就可以使得OGNL表达式被执行

七、'$'运算符

两个用途:

1)用于在国际化资源文件中,引用OGNL表达式。例如在资源文件中有一个标签fileName,则可以在资源文件中引用:

validation.require=${getText(fileName)} is required

2)在struts2配置文件中引用OGNL表达式,如:

<action name="AddPhoto" class="addPhoto">

<result type="redirect">ListPhotos.action?albumId=${albumId}</result>--但这个albumId是从哪来的呢?

</action>

 

转自:http://blog.csdn.net/jpr1990/article/details/6929655

分享到:
评论

相关推荐

    ognl表达式java使用案例详解(测试通过)

    本案例提供ognl使用详解,测试通过,只需解压放入自己WEB项目中,执行struts_ognl包内java文件即可(未提供jia包,若需要可以联系留言发至邮箱),若测试不好可以联系本人提供指导. Struts 2默认的表达式语言是OGNL...

    JS:ognl表达式

    ### JS:ognl表达式详解 #### 一、OGNL表达式概述 OGNL (Object-Graph Navigation Language) 是一种强大的表达式语言,用于获取和设置 Java 对象的属性。它最初是由 John Rose 和 Luke Blanshard 开发,并被广泛...

    OGNL表达式

    #### 四、OGNL表达式的具体用法 OGNL表达式通常结合Struts2的标签一起使用,比如使用 `&lt;s:property value="expression"/&gt;` 来展示数据。在使用过程中,需要注意#、%和$这三个符号的正确使用: - **#**:通常用于...

    OGNL表达式基本语法与用法详解

    这些符号在OGNL表达式中经常出现,但它们的使用方法却是开发者不容易掌握和理解的部分。 1.#符号的三种用法 #符号有三种用法: * 访问非根对象属性,例如示例中的#session.msg表达式,由于Struts 2中值栈被视为...

    Struts2 OGNL表达式实例详解

    Struts2 OGNL表达式实例详解 Struts2 OGNL表达式实例详解主要介绍了Struts2 OGNL表达式实例详解,相关实例代码,需要的朋友可以参考。Object Graph Navigation Language(对象图导航语言),就是用点来访问成员变量...

    OGNL表达式详解[定义].pdf

    在Struts2中,OGNL通常与Struts2的标签结合使用,比如`&lt;s:property value="xx"/&gt;`,这个标签会根据`xx`这个OGNL表达式来获取或设置对象的属性值。 在实际开发中,常常会遇到关于`#`、`%`和`$`的使用问题。`#`在OGNL...

    精通struts2的ognl表达式

    #### OGNL表达式详解 1. **访问不同范围的变量** - 在Struts2中,可以使用OGNL来访问ValueStack中的值。ValueStack是Struts2的核心组件之一,用于存储请求期间的数据。 - 例如,可以通过`...

    ognl表达式详解

    在实际应用中,OGNL通常与Struts2的标签库结合使用,如`&lt;s:property value="xx" /&gt;`,这个标签会根据`value`属性的OGNL表达式来获取或显示相应的值。 在使用OGNL时,常常会遇到#、%和$这三个符号的使用问题。这些...

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

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

    struts2 ognl的用法

    - **Map的使用**:通过OGNL表达式直接创建Map,并在页面中使用,例如: ```java ,'foo2':'bar2'}['foo1']"/&gt; ``` ##### 2. “%”符号的使用 当页面元素的值为表达式时,可以使用`%{}`来执行OGNL表达式,该表达式...

    ognl源代码以及api文档

    在本文中,我们将深入探讨ognl2.6.11版本的源代码和API文档,了解其核心概念、功能及使用方法。 **一、ognl基础** 1. **表达式语法**:ognl表达式由对象路径和操作组成,如`object.property`或`array[index]`,...

    ognl源码

    OGNL表达式通常包含对象路径、属性访问和方法调用。例如,`user.name`表示访问`user`对象的`name`属性,`list[0]`表示访问`list`中的第一个元素,`map['key']`则用于访问`map`中的键为`'key'`的值。OGNL还支持算术...

    struts ognl

    2. 结果映射:在配置文件中,Action结果可以使用OGNL表达式动态指定视图,如`result_name="@{user.isAdmin ? 'adminPage' : 'userPage'}"`根据user.isAdmin属性值决定跳转页面。 3. 模板标签:在JSP页面中,Struts 2...

    Struts2之Ognl详解案例TextOgnl

    在JSP页面中,我们可以使用OGNL表达式来显示和操作这些属性: ```jsp #action.list.add("New Item"); // 添加元素到集合 %&gt; &lt;li&gt;&lt;%= #item %&gt;&lt;/li&gt; &lt;!-- #item 是迭代中的当前元素 --&gt; ``` 四、OGNL的...

    ognl的源码

    - 视图层的JSP或Freemarker模板可以直接使用OGNL表达式来访问Action的属性,实现动态渲染。 - OGNL还用于动态方法调用,使得开发者可以基于不同的条件执行不同的方法。 6. **源码学习要点** - 了解`Expression`...

    ognl2.7.3源代码

    4. **上下文和变量**:OGNL表达式可以访问上下文中的变量,这在模板引擎或框架中非常有用,例如`#session.user.name`。 **二、源码分析** 1. **解析器和编译器**:在源码中,你会看到OGNL的解析器如何将字符串...

    Struts2的OGNL详解

    ### Struts2中的OGNL详解 #### 一、OGNL简介 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,它属于一种Expression ...了解并掌握OGNL的基本概念和使用方法对于熟悉Struts2框架具有重要意义。

    struts2中的ActionContext与ognl

    在视图层,开发者可以使用OGNL表达式从ActionContext的ValueStack中获取数据,从而动态地构建视图。而在控制器层,Action类的属性可以通过ActionContext的ValueStack与HTTP请求参数进行绑定,或者在Action的执行过程...

    ognl-2.6.11.jar 官方源码

    2. **实验和调试**:创建示例项目,实践使用OGNL表达式,观察其行为,同时通过调试源码来理解其工作过程。 3. **学习文档**:官方文档会详细介绍OGNL的语法和用法,是学习的基础。 4. **参与社区**:加入OGNL相关的...

Global site tag (gtag.js) - Google Analytics