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

struts 2中使用OGNL

阅读更多

OGNL全称为Object-Graph Navigation Language,是一种表达式语言(EL)。

EL的支持者认为,在JSP页面中应尽可能地避免 <% %> 这样的标记,而代之以Tag,以使页面更简洁,并体现页面与后台代码分离的设计原则。对此我持保留意见,因为我并不认为使用Tag后的页面的可读性要高于使用<% %>。

Struts 2支持如下几种EL:

  • OGNL(Object-Graph Navigation Language): 可以方便地操作对象属性的开源表达式语言
  • JSTL(JSP Standard Tag Library): JSP 2.0集成的标准的表达式语言
  • Groovy: 基于Java平台的动态语言,它具有时下比较流行的动态语言(如Python、Ruby和Smarttalk等)的一些新特性
  • Velocity: 严格来说不是表达式语言,它是一种基于Java的模板匹配引擎,据说其性能要比JSP好

Struts 2默认的表达式语言是OGNL,原因是它相对其它表达式语言具有下面几大优势:

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

OGNL是通常要结合Struts 2的标志一起使用,如<s:property value="xx" />等。大家经常遇到的问题是#、%和$这三个符号的使用。下面我讲述这个问题:

 

4.1 “#”的用途

访问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)的Ma, #session.userName相当于session.getAttribute("userName")
  • application:包含当前应用的ServletContext的属性(attribute)的Map,#application.userName相当于application.getAttribute("userName")
  • attr:用于按request > session > application顺序访问其属性(attribute),#attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止

过滤和投影(projecting)集合

如books.{?#this.price<100}

构造Map

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

 

4.2 %的用法

“%”符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。例如在Ognl.jsp中加入以下代码:

<h3>%的用途</h3>
<p><s:url value="#foobar['foo1']" /></p>
<p><s:url value="%{#foobar['foo1']}" /></p>

刷新页面,显示以下内容

%的用途

#foobar['foo1']

bar1

 

4.3 $的用法

“$”有两个主要的用途:

  1. 用于在国际化资源文件中,引用OGNL表达式
  2. Struts 2配置文件中,引用OGNL表达式,如
<action name="AddPhoto" class="addPhoto">
 <interceptor-ref name="fileUploadStack" />            
 <result type="redirect">ListPhotos.action?albumId=${albumId}</result>
</action>
分享到:
评论

相关推荐

    Struts2 使用OGNL表达式

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

    struts2中的OGNL的源码

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

    struts2_OGNL Demo

    这个项目旨在帮助开发者理解和学习如何在Struts2中使用OGNL来操纵对象和数据。OGNL是Struts2中一个重要的组件,它允许在视图层和控制层之间传递和操作数据。 首先,我们来看`.classpath`、`.mymetadata`、`.project...

    struts2 ognl的用法

    在Struts2中使用OGNL表达式主要涉及以下几种符号:“#”、“%”和“$”。 ##### 1. “#”符号的使用 - **访问Struts2上下文**: - `#`可用于访问当前的`ActionContext`,如`#ActionContext.getContext()`。 - ...

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

    在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于在视图层和模型层之间进行数据绑定和表达式计算。本文将深入探讨如何在Struts2中有效地使用OGNL表达式。 首先,OGNL是Struts2的...

    struts2中OGNL使用源自javaWeb编程王者归来

    在这个实例中,我们将深入探讨如何在Struts2中使用OGNL来获取Servlet对象的值、筛选集合中的对象,以及理解OGNL表达式的生命周期。 首先,让我们了解OGNL的基本语法。OGNL允许我们通过点号(.)和方括号([])来...

    java的Struts中的OGNL标签的使用,详细介绍

    本篇文章将详细介绍如何在Struts2中使用OGNL标签。 OGNL作为Struts2的核心部分,允许我们在JSP页面上直接访问Action类中的属性,甚至可以进行复杂的运算和控制流程。它的主要优点在于简洁和灵活,能够轻松处理Java...

    struts2_ognl实验代码

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

    struts2 中 OGNL表达式的使用

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

    Struts2核心包ognl-2的源代码

    Struts2将ActionContext与OGNL结合,使得请求参数可以直接在表达式中使用。 5. **安全特性**:在Struts2中,OGNL的不当使用可能导致安全漏洞,如著名的Struts2 OGNL注入攻击。源代码中包含了对这种风险的防护措施,...

    struts2中的ognl

    Struts2是一个流行的Java web开发框架...通过这些知识点,我们可以更深入地理解Struts2中OGNL的使用方式,以及如何有效地在web应用中传递和操作数据。熟练掌握这些技能,将极大地提升Struts2应用的开发效率和代码质量。

    OGNL学习笔记,包含struts2中ognl的各种用法

    本篇笔记主要介绍了在Struts2中使用OGNL的一些基本用法。 首先,OGNL可以用来获取不同范围内的属性值。在Java Web开发中,有四种常见的作用域:Request、Session、Application和Page。在示例代码中,`&lt;s:property&gt;`...

    学习OGNL在Struts2中工作原理

    下面通过几个具体的例子来说明如何在Struts2中使用OGNL: 1. **设置和获取数据**: 在Action中设置值: ```java ActionContext.getContext().getValueStack().set("test", "lovejava"); ``` 在JSP页面中获取...

    struts2.0中的ognl

    在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置对象属性,它在Struts2的核心组件中扮演着至关重要的角色。本篇文章将深入探讨OGNL在Struts2.0中的应用及其重要性。 ...

    struts2中的ognl.jar

    在Struts2中,OGNL(Object-Graph Navigation Language)扮演着核心角色,它是一个强大的表达式语言,用于获取和设置对象的属性。本篇文章将深入探讨Struts2中的OGNL.jar及其相关知识点。 首先,OGNL是Object-Graph...

    Struts2中的OGNL

    在Struts2中,OGNL(Object-Graph Navigation Language)扮演着核心角色,它是一种强大的表达式语言,用于在Action类和JSP页面之间交换数据。下面我们将深入探讨OGNL的基本概念、特性以及在Struts2中的应用。 **...

    Struts 2中的OGNL .rar

    本压缩包文件“Struts 2中的OGNL.rar”包含的PDF文档详细介绍了如何在Struts 2框架中使用OGNL。 OGNL是一种强大的表达式语言,它的主要功能是在Java对象图中导航并操作数据。在Struts 2中,OGNL被用来解析和构造...

    第四章:struts2中的OGNL.ppt

    第四章:Struts2中的OGNL.ppt详细探讨了Struts2框架中使用OGNL(Object-Graph Navigation Language,对象图导航语言)的关键概念和技术。OGNL作为一种强大的表达式语言,使得开发者能够方便地访问Action携带的数据,...

    struts2 ognl

    这篇概述将深入探讨如何在Struts2中使用OGNL来操作List、Set、Map以及访问方法和静态变量。 1. **OGNL基本概念**:OGNL是基于对象和图形的表达式语言,它允许开发者以简洁的语法动态地访问和修改对象属性。在Struts...

Global site tag (gtag.js) - Google Analytics