`
ll_feng
  • 浏览: 391297 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts2中如何使用OGNL表达式

阅读更多
struts2支持多种表达式语言,如:jstl、OGNL等常用表达式。但它默认的还是OGNL。从网上收集了下资料,做个学习笔记。(首先向资料的原创作者致谢!因为下面的内容有部分引用,例如:http://www.blogjava.net/max/archive/2007/04/28/114417.html)

一、什么是OGNL,有什么特点?
OGNL(Object-Graph Navigation Language),大概可以理解为:对象图形化导航语言。是一种可以方便地操作对象属性的开源表达式语言。
OGNL有如下特点:

引用

(1)、支持对象方法调用,形式如:objName.methodName();
(2)、支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名 |  值名],例如:@java.lang.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME;
(3)、支持赋值操作和表达式串联,如price=100, discount=0.8, calculatePrice(),这个表达式会返回80;
(4)、访问OGNL上下文(OGNL context)和ActionContext;
(5)、操作集合对象。





二、使用OGNL表达式
OGNL要结合struts标签来使用。由于比较灵活,也容易把人给弄晕,尤其是“%”、“#”、“$”这三个符号的使用。由于$广泛应用于EL中,这里重点写%和#符号的用法
1、“#”符号有三种用途
(1)、访问非根对象(struts中值栈为根对象)如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属性,直到找到为止




   
   
(2)、用于过滤和投影(projecting)集合,如:
books.{?#this.price>35}

(3)、构造Map,如:
#{'foo1':'bar1', 'foo2':'bar2'}

这种方式常用在给radio或select、checkbox等标签赋值上。如果要在页面中取一个map的值可以这样写:
<s:property value="#myMap['foo1']"/>


2、&ldquo;%&rdquo;符号的用途是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是OGNL表达式。
这是一开始最让我不能理解的符号,原因是一些相关资源在表述时不太准备,经过一翻痛苦的探索,终于明白了它的用途。实际上就是让被理解为字符串的表达式,被真正当成ognl来执行。很有点类似javascript里面的eval()功能,例如
var oDiv = eval("document.all.div"+index)

当index变量为1时,语句就会被当作
var oDiv = document.all.div1

来执行。%{}就是起这个作用。举例:
<s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/>
<s:property value="#myMap['key1']"/>
<s:url value="#myMap['key1']"


上面的代码第2行会在页面上输出&ldquo;value1&rdquo;
而第3行则会输出"#myMap['key1']"这么一个字符串。
如果将第3行改写成这样:
<s:url value="%{#myMap['key1']}"/>

则输出为&ldquo;value1&rdquo;
这说明struts2里不同的标签对ognl的表达式的理解是不一样的。如果当有的标签&ldquo;看不懂&rdquo;类似&ldquo;#myMap['key1']&ldquo;的语句时,就要用%{}来把这括进去,"翻译"一下了。

3、&ldquo;$&rdquo;有两种用途
(1)、在国际化资源文件中,引用OGNL表达式
(2)、在Struts 2配置文件中,引用OGNL表达式:
<action name="saveUser" class="userAction" method="save">    
<result type="redirect">listUser.action?msg=${msg}</result>
</action>



分享到:
评论

相关推荐

    Struts2 如何使用OGNL表达式(三十八)

    本文将深入探讨如何在Struts2中有效地使用OGNL表达式。 首先,OGNL是Struts2的核心组成部分,它允许开发者在Action类和JSP页面之间灵活地传递和访问数据。在Action类中,你可以设置属性,然后在JSP页面上通过OGNL...

    struts2 中 OGNL表达式的使用

    struts2 中 OGNL表达式的使用struts2 中 OGNL表达式的使用

    Struts2 使用OGNL表达式

    这篇博客文章可能详细探讨了如何在Struts2中使用OGNL来传递和操作数据。 OGNL是Struts2的核心组件之一,它允许开发者通过简单的字符串表达式来访问和修改对象的属性,甚至可以处理复杂的对象结构。以下是一些关于...

    Struts2的标签库及OGNL表达式语言

    本篇文章将详细探讨Struts2中的OGNL表达式语言以及标签库。 **OGNL(对象图导航语言)** OGNL是一种强大的表达式语言,它允许开发者通过简洁的语法来访问和操作对象的属性。在Struts2框架中,OGNL扮演着至关重要的...

    ognl表达式 ognl表达式

    #### 五、Struts2中的OGNL表达式实现机制 为了使EL表达式能够访问`ValueStack`中的数据,Struts2在`HttpServletRequest`的基础上封装了一个类——`StrutsRequestWrapper`。这个类重写了`getAttribute_r`方法,使其...

    struts2标签和OGNL表达式

    在Struts2中,OGNL表达式通常与Struts标签结合使用,如`s:property`标签,用于显示对象的属性值。例如,`&lt;s:property value="name"/&gt;`将显示栈顶对象的"name"属性值。栈顶对象是指在ValueStack(值栈)中位于最顶层...

    struts2标签和OGNL表达式.pdf

    在Struts2中,OGNL被用于处理各种对象,包括值栈(Value Stack)、请求、会话、应用范围的属性等。它能够对这些对象进行查询、操作和修改。OGNL表达式的格式通常包括对对象、属性和方法的引用。例如,可以使用OGNL...

    ognl表达式案例

    总的来说,这个案例将帮助我们理解如何在Struts2中使用OGNL表达式来实现数据的展示和操作,以及如何通过Struts2的标签库更好地利用OGNL的功能。通过学习和实践,开发者可以提高Web应用程序的可维护性和灵活性。

    struts2-OGNL表达式测试

    这个“struts2-OGNL表达式测试”可能是一个测试项目或代码示例,旨在演示如何在Struts2应用中使用OGNL表达式。 OGNL是Struts2的核心组件之一,它允许开发者通过简单的字符串表达式来获取或设置对象的属性。这使得视...

    struts2 OGNL表达式

    在Struts2中,OGNL被用作默认的表达式语言,用于在Action类和JSP页面之间传递数据,以及在Action上下文中进行动态方法调用。 在Struts2的配置文件中,如struts.xml或struts.properties,你可以看到OGNL表达式的使用...

    Struts2深入学习----OGNL表达式原理

    其中,OGNL(Object-Graph Navigation Language)是Struts2中的核心表达式语言,用于数据绑定和表示层的数据操作。这篇深入学习的文章主要探讨了OGNL表达式的原理和使用。 首先,我们来理解一下OGNL是什么。OGNL是...

    struts2 ognl表达式

    在Struts2中,OGNL表达式可以嵌入到各种基本标签中,如`s:textfield`, `s:property`, `s:action`等,以实现动态的数据展示和交互。例如,`&lt;s:property value="%{#session.user.name}" /&gt;`会将session中user对象的...

    struts2中ognl表达式的理解和用法

    在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置对象的属性。这篇博客将深入探讨OGNL表达式的理解和用法。 OGNL的全称是对象图导航语言,它的主要功能是在对象模型...

    struts2_OGNL表达式ActionContext及valuesStack

    本文将深入探讨Struts2中的OGNL表达式,ActionContext以及valuesStack。 首先,OGNL表达式是Struts2中不可或缺的一部分,它允许开发者以一种声明式的方式访问和修改对象的属性。比如,`myBean.getMyProperty()`这样...

    OGNL表达式

    - **#**:通常用于表示OGNL表达式,在Struts2中作为OGNL表达式的开头标记。 - **%**:用于指定JSP页面的编码格式,如`;charset=utf-8" pageEncoding="utf-8" %&gt;`。 - **$**:在JSP页面中表示EL表达式的开头,但在...

    struts2 OGNL 表达式及各种标签的使用

    本文将深入探讨OGNL的基本用法、标签的使用以及其在Struts2中的实际应用。 1. **OGNL基本概念** - OGNL是一种表达式语言,用于获取和设置对象属性。它支持点号和索引访问、方法调用、运算符、集合操作等。 - 例如...

    JS:ognl表达式

    - **框架集成**:许多 Java 框架,如 Struts2、Hibernate Validator 等,都集成了 OGNL 表达式用于数据绑定和验证。 - **模板引擎**:在模板引擎中使用 OGNL 表达式来动态渲染页面。 - **业务逻辑处理**:在复杂的...

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

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

    struts2_ognl实验代码

    这篇文档将深入探讨在Struts2中使用OGNL表达式的实验代码,以及其相关知识点。 首先,了解OGNL的基本概念至关重要。OGNL允许我们直接通过字符串表达式来访问和修改对象的属性。例如,如果我们有一个用户对象`user`...

    struts2中的OGNL的源码

    其中,OGNL(Object-Graph Navigation Language)是Struts2中的核心表达语言,用于在视图层与模型层之间传递数据。在深入理解OGNL的源码之前,我们首先需要了解OGNL的基本概念和用法。 OGNL是一种强大的表达式语言...

Global site tag (gtag.js) - Google Analytics