`
pengfeng
  • 浏览: 231684 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

Struts2学习笔记-OGNL

阅读更多

<!----><!----><!----> <!---->

从Struts2出来就开始关注,但一直没有全面的去学习和研究过,最近 计划把Struts2的官方

文档好好的看一遍,并会在这里将学习的内容和 遇见的问题进行发布,欢迎大家来指导和讨

论(由于本人英文水平有限,有很多翻译不正确的地方希望大家进行指正,第一次发表这种

学习笔记,也希望得到大家的鼓励

好了,废话少说,直接入题...

 

XWork 提供了通过 OGNL ValueStack 操作的支持,标准 OGNL 要求只对一个 root 操作, XWork ValueStack 概念要求支持多个 roots 操作。

1)标准 OGNL 使用举例:

假设在 OgnlContext map 中有两个对象: ”foo”->foo and “bar”->bar 并且 foo 对象被配置为单一的 root 对象,下边的例子解释了 OGNL 处理的三种情形:

#foo.blah // returns foo.getBlah()

#bar.blah // returns bar.getBlah()

blah      // returns foo.getBlah() because foo is the root

以上说明,OGNL 允许在context 中有多个对象,但是如果你要访问的对象不是root 的话,必须在要访问的对象前边加上一个类似@bar 的命名空间。

2) XWork 有一个专门的 OGNL PropertyAccessor, 该属性访问器将从上到下自动查找整个 stack ,直到找到你要找的属性对应的对象。

For example: 假设 stack 中包含有两个对象: Animal and Person ,这两个对象都有“ name ”属性, Animal 有一个“ species ”属性, Person 有一个“ salary ”属性, Animal stack 的顶部, Person Animal 的下边,下边的代码片断帮助我们理解其原理:

species    // call to animal.getSpecies()

salary     // call to person.getSalary()

name       // call to animal.getName() because animal is on the top

上面的代码片断中返回的是 animal name, 通常这是我们想得到的效果,但是有时我们想得到下级对象的同样的属性,针对这种情况, XWork ValueStack 中添加了索引的支持,因此,可使用以下代码片断分别得到 Animal Person 对象的 name 属性:

[0].name   // call to animal.getName()

[1].name   // call to person.getName()

With expression like [0] ... [3] etc. WebWork will cut the stack and still returned back a CompoundRoot object. To get the top of that particular stack cut, use 0<!----><!----> <!----> .top (水平有限,为免误人子弟,在此直接引用原文由大家自己领会)

ognl expression

description

[0].top

would get the top of the stack cut starting from element 0 in the stack (similar to top in this case)

[1].top

would get the top of the stack cut starting from element 1 in the stack

3)访问静态属性

OGNL 支持静态属性和静态方法的访问,具体代码片断举例如下:

@some.package.ClassName@FOO_PROPERTY


@some.package.ClassName@someMethod()


当然, XWork 允许使用 ”vs”prefix 避免指定完整的包名访问 Action 类中的静态方法和静态属性,如:

@vs@FOO_PROPERTY

@vs@someMethod()

 

@vs1@FOO_PROPERTY

@vs1@someMethod()

 

@vs2@BAR_PROPERTY

@vs2@someOtherMethod()

vs ”代表“value stack.

The important thing to note here is that if the class name you specify is just "vs", the class for the object on the top of the stack is used. If you specify a number after the "vs" string, an object's class deeper in the stack is used instead. (大家可对照上面的举例来自行理解该段说明)

4) Struts2 指定的对象

Struts2 request parameters and request, session, and application attributes 都存放在 OGNL stack 里面,可通过如下方式访问它们:

name

value

#parameters['foo'] or #parameters.foo

request parameter ['foo'] (request.getParameter())

#request['foo'] or #request.foo

request attribute ['foo'] (request.getAttribute())

#session['foo'] or #session.foo

session attribute 'foo'

#application['foo'] or #application.foo

ServletContext attributes 'foo'

#attr['foo'] or #attr.foo

Access to PageContext if available, otherwise searches request/session/application respectively

 

FAQ:

1)在 jsp 2.1 中, # 至今被用作 JSP EL ,在这种情况下就会引起和在应用中使用 OGNL # 操作产生冲突的问题,对于这种情况,可通过在 web.xml 配置文件中添加以下配置片断在 JSP 2.1 容器中禁用 JSP EL

<jsp-config>

    <jsp-property-group>

      <url-pattern>*.jsp</url-pattern>

      <el-ignored> true </el-ignored>

</jsp-property-group>

</jsp-config>

 

 

分享到:
评论

相关推荐

    struts2学习笔记.doc

    ### Struts2学习笔记知识点概览 #### 一、环境搭建 **1.1 Struts2简介** - **Struts2概述**:Struts2是一个开源的MVC框架,它结合了Struts 1.x、WebWork和其他一些框架的优点。Struts2的主要目标是简化Web应用程序...

    struts2学习笔记(完美总结)——转自OPEN经验库

    本文将深入探讨Struts2的核心概念,包括Action、Result、配置文件、OGNL与ValueStack、Tags以及项目中的关键实践。 **一、Action** Action是Struts2中处理业务逻辑的核心组件,它是实现了`...

    struts2 学习重点笔记

    ### Struts2 学习重点知识点总结 #### 一、Struts2 概念与架构 **1.1 Struts2 简介** - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 ...

    struts2四天的学习笔记

    13. ** strut2四天笔记**:这份学习笔记可能涵盖了以上所有知识点,包括如何创建Action,配置struts.xml,使用OGNL表达式,处理异常,以及实践中的各种技巧和最佳实践。 在四天的学习过程中,你应该通过实践和理解...

    struts2学习笔记

    ### Struts2学习笔记知识点详解 #### 一、准备工作及实例 **1. 解压struts-2.1.6-all.zip** - **Apps目录**:包含struts2自带的例子程序,供用户学习和参考。 - **Docs目录**:提供官方文档,包括API文档、指南等...

    struts2 OGNL语言学习笔记

    Struts2 OGNL语言学习笔记 OGNL(Object-Graph Navigation Language)是 Struts 2 中的一种表达式语言,主要用于简化 JSP 页面中的编码,使页面与后台代码分离。下面是 OGNL 语言的主要特点和用法: 1. 支持对象...

    Struts2_OGNL 笔记

    Struts2_OGNL笔记主要关注的是如何在Struts2框架中使用OGNL(Object-Graph Navigation Language)表达式语言。OGNL作为一种强大的表达式语言,常用于Struts2的视图层,允许开发者轻松地访问和操作Java对象的属性。 ...

    struts-2.3.4笔记

    4. **OGNL(Object-Graph Navigation Language)**:OGNL 是 Struts 2 中用于访问和操作对象属性的表达式语言,它简化了视图层的数据绑定。例如,在 JSP 中,可以直接使用 `${property}` 来访问值栈中的属性。 5. *...

    struts2学习笔记.rar

    这个"struts2学习笔记.rar"文件很可能包含了关于Struts2框架的详细教程和实践案例,对于学习和理解Struts2的核心概念和技术是非常有帮助的。 首先,Struts2框架的引入是为了克服早期Struts1框架的一些局限性,提供...

    Struts2学习笔记

    本学习笔记将深入探讨Struts2的核心概念、架构以及实际应用。 一、Struts2框架概述 1. 架构:Struts2基于Model-View-Controller(MVC)设计模式,将业务逻辑、数据处理和用户界面分离,提高了代码的可读性和可维护...

    Java相关课程系列笔记之十三Struts2学习笔记.doc

    本笔记将详细解析Struts2的核心概念、发展历程、使用方法以及实际案例,帮助读者深入理解并掌握这一框架。 1. **Struts2概述** - **为什么使用Struts2**:在Web应用开发中,Struts2提供了结构化的控制层,有助于...

    Struts1及14. Struts2学习笔记

    本学习笔记将对Struts1和Struts2进行详细解析。 **Struts1简介** Struts1是早期流行的MVC框架,它的核心是ActionServlet,负责处理HTTP请求,并通过ActionForm对象收集表单数据,然后调用Action类的方法进行业务...

    struts2综合笔记

    - `ognl-3.0.3.jar`: 对象图导航语言,用于读写对象属性。 - `freemarker-2.3.18.jar`: 用于 UI 标签的模板引擎。 - `commons-logging-1.1.x.jar`: 日志处理库。 - `commons-fileupload-1.2.2.jar`: 文件上传...

    Struts2.1学习笔记

    ### Struts2.1学习笔记 #### Struts2的来源与优点 - **来源**:Struts2是在WebWork2的基础上发展起来的,它继承了WebWork2的优点,并且进行了改进,使其更适合现代Web应用程序的需求。与Struts1相比,Struts2的...

Global site tag (gtag.js) - Google Analytics