`

struts2 ognl 中的%$#(转)

 
阅读更多

1、理解Struts2中的ValueStack

ValueStack实际是一个接口,在Struts2中利用OGNL时,实际上使用的是实现了该接口的OgnlValueStack类,这个类是Struts2利用OGNL的基础。OgnlValueStack类的主要属性关系图如下:

                                                           |
                                                          |--application
                                                          |
                                                           |--session
context map (OgnlValueStack属性)--|
                                                          |--value stack (OgnlValueStack的root属性,实际是个ArrayList)
                                                          |
                                                          |--request
                                                          |
                                                          |--parameters
                                                          |
                                                          |--attr (searches page, request, session, then application scopes)

OgnlValueStack类包含两个重要的属性,一个root和一个context。其中root本质上是一个ArrayList,而context是一个Map(更确切的说是一个OgnlContext对象)。在这个OgnlContext对象(context)中,有一个默认的顶层对象root,OGNL访问context中这个默认顶层对象中的元素时,是不需要#号的,直接通过元素的名称来进行访问,而访问其他对象时,如request、session、attr等,则需要#号引用。Struts2将OgnlValueStack的root对象赋值给了context中的root对象,在OgnlValueStack的root对象中,保存着调用Action的实例,因此,在页面上通过Struts2标签访问Action的属性时,就不需要通过#号来引用。

 

2、OgnlValueStack与ActionContext的关系

在Struts2中,OgnlValueStack是ActionContext的基础,在ActionContext中,有一个Map类型的属性context,而这个context就是OgnlValueStack的context对象,ActionContext中的getSession()、getApplication()等方法,底层都是通过context.get()来实现的。

 

3、关于#、%的使用

在Struts2的标签中,可以直接访问Valuestack中的对象,对于Valuestack中的根对象,可以不需要加#号直接访问(如action实例的属性),而对于非根对象,则需要通过加#来访问(如Valuestack中存储的Session、Application等对象)。而对于%的使用,主要是用来包装需要计算的表达式。举一个应用的实例吧:

有时候需要通过Session来携带一些信息到前台,如一些类似“修改成功”的提示信息,当这些信息在前台被使用之后,为了不让这些信息影响到其他页面,需要立即将Session中的相应信息清除。此时,可以使用<s:property value="%{removeSession('attrId')}" />来将Session中attrId的值删除(注:removeSession()是action对象中定义的一个方法)。

分享到:
评论

相关推荐

    Struts2 ognl中的#、%和$符号用法说明

    在Struts2中,OGNL(Object-Graph Navigation Language)是默认表达式语言,用于访问和操作对象的属性。在OGNL表达式中,`#`、`%`和``$`符号扮演着不同的角色,它们是OGNL语法的重要组成部分。下面将详细介绍这三个...

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

    它在许多Java应用框架中得到了广泛应用,尤其是在Struts2中作为默认的表达式语言。OGNL中的`#`、`%`和`$`符号各有其独特的功能和应用场景,对于理解和熟练使用这些符号至关重要。 #### #符号的用途 1. **访问根...

    struts2 ognl的用法

    ### Struts2中OGNL的使用详解 #### 一、OGNL简介 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取或设置一个对象图中的属性。它在Struts2框架中扮演着极其重要的角色,是Struts2实现...

    struts2.0标签$ # %的区别

    Struts2框架作为Java Web开发中的重要组成部分,在处理MVC架构时提供了强大的支持。其中,Struts2标签库(Struts2 Tags Library)是开发者常用的工具之一,它不仅简化了前端页面的开发工作,还提高了应用的性能与可...

    struts2中的OGNL的源码

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

    OGNL表达式中的#、%和$.txt

    “$”符号在Struts2中主要用作OGNL表达式的起始标记,在模板文件(如JSP页面)中,它用于指示Struts2框架应该解析为OGNL表达式。 1. **模板文件中的应用**: - 示例:`reg.ageRange = $ {min} 到 $ {max}` - 解释...

    struts2 ognl用法项目

    在Struts2中,OGNL用于处理动作类的属性到JSP页面的传递,以及用户输入到动作类的绑定。 首先,让我们了解OGNL的基本语法。OGNL表达式通常包含两个部分:对象引用和属性访问。例如,`user.name`表示获取名为`user`...

    Struts2之Ognl详解案例TextOgnl

    在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置对象的属性。这篇博客将深入探讨OGNL在Struts2中的应用,并通过案例"TextOgnl"来展示其工作原理。 一、OGNL的基本...

    Struts2_OGNL

    OGNL(Object-Graph Navigation Language)是Struts2框架中的一个重要组件,用于在Web应用中访问和操作Java对象的属性,调用其方法,以及执行类型转换等操作。 OGNL是对象图导航语言的缩写,它是一种功能强大的...

    Struts2 ognl

    在Struts2中,OGNL作为视图层与控制器层之间的桥梁,负责解析和执行来自Action的请求参数,将它们映射到Action类的属性,同时将Action的结果传递给视图进行渲染。 1. **OGNL的基本语法** OGNL的语法非常灵活,可以...

    struts2 OGNL表达式

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

    Struts2核心包ognl-2的源代码

    其中,OGNL(Object-Graph Navigation Language)是Struts2中的一个关键组件,它是一种强大的表达式语言,用于在运行时访问和操作对象的属性。这个压缩包包含的是OGNL的2版本的源代码,这对于理解Struts2框架的工作...

    struts2 ognl表达式

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

    struts2 ognl源码

    OGNL(Object-Graph Navigation Language)是Struts2中的核心表达式语言,用于在Action对象和视图之间传递数据。在这个主题中,我们将深入探讨Struts2 OGNL2.6.11的源码,了解其内部工作原理和关键功能。 首先,...

    Struts2 使用OGNL表达式

    在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于数据绑定和表示层的数据交换。这篇博客文章可能详细探讨了如何在Struts2中使用OGNL来传递和操作数据。 OGNL是Struts2的核心...

    struts2 OGNL语言学习笔记

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

    struts2 中 OGNL表达式的使用

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

    Struts2 OGNL示例(Maven项目)

    在Struts2中,OGNL(Object-Graph Navigation Language)是默认的表达式语言,用于在视图、控制器和模型之间进行数据绑定和表达式处理。这个"Struts2 OGNL示例(Maven项目)"提供了使用OGNL与Struts2集成的实例,...

    Struts2 $,#,%详解及实例代码

    `%`在Struts2中并不直接作为OGNL的一部分使用,但在一些特殊场合,例如在拦截器配置或者自定义插件中,`%`可能会用于路径拼接或者变量替换。 现在我们详细分析提供的代码片段: 1. `application`: `ActionContext....

    ognl.rar_OGNL API_struts2 ognl api_struts2帮助文档

    在Struts2中,这个上下文通常包含ActionContext,包含了Action实例、请求、会话等信息。 3. **ValueStack**:Struts2的ValueStack是一个对象栈,它用于存放Action实例和其他数据。OGNL可以方便地从ValueStack中查找...

Global site tag (gtag.js) - Google Analytics