`

OGNL中重要的3个符号:#、%、$

 
阅读更多
1.#符号
#符号的用途一般有三种。

(1)访问非根对象属性,例如#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。实际上,#相当于ActionContext. getContext();#session.msg表达式相当于ActionContext.getContext().getSession(). getAttribute("msg") 。

 

(2)    用于过滤和投影(projecting)集合,如persons.{?#this.age>25},persons.{?#this.name=='pla1'}.{age}[0]。



 

 

 

(3)    用来构造Map,例如示例中的#{'foo1':'bar1', 'foo2':'bar2'}。

 

2.%符号

%符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值,这个类似js中的eval,很暴力。

3.$符号

$符号主要有两个方面的用途。

(1) 在国际化资源文件中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在${min}同${max}之间。

(2) 在Struts 2框架的配置文件中引用OGNL表达式,例如

<validators>  
    <field name="intb">  
            <field-validator type="int">  
            <param name="min">10</param>  
            <param name="max">100</param>  
            <message>BAction-test校验:数字必须为${min}为${max}之间!</message>  
        </field-validator>  
    </field>  
</validators> 

 

struts2中怎样来应用OGNL?

 

在struts2中,valuestack就是根对象,在struts2的任何流程中,valueStack中的最顶层对象一定是action对象。

 

有时候会用到%{#person.id}这种符号的使用:

 

原因是:struts2的<s:property/>标签可以自动把其中的值当做ognl表达式来处理,其它的一些标签如:<s:a href="">,href中的值就不会将其中的字符串当做ognl表达式来处理,他只会当做普通的字符串来处理,如果我们想让其当做ognl表达式来处理时,需要用%{},包裹起来。<s: a href="abc.action?id=%{#person.id}">

 

struts2中的标签中哪些会是自动当做ognl表达式来处理的呢?

 

可以有如下的方法来检验:在<s:property value="%{name}">,可以在value上面用%{}包裹起来,如果值没有变化,就证明是当做ognl来处理的。

 

总结:关于struts2标签库属性值的%与#的关系:

 

如果标签的属性值是ognl表达式,那么无需加上%{}

 

如果标签的属性值字符串类型,那么在字符串中凡是出现的%{}都会解析成ognl表达式,解析完毕之后再与其他的字符串进行拼接构造出最后的字符串值。

 

我们可以在所有的属性值上加%{},这样如果该属性值是ognl表达式,那么标签处理类就会将%{}忽略掉。(struts2中所有的标签都可以处理ognl表达式,不行的就加%{}嘛)

  • 大小: 224.8 KB
  • 大小: 709.7 KB
分享到:
评论

相关推荐

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

    综上所述,`#`、`%`和`$`这三个符号在OGNL表达式中扮演着不同的角色,分别用于访问根对象属性、计算字符串类型的表达式值以及引用OGNL表达式。熟练掌握它们的用法可以帮助开发者更高效地利用OGNL表达式进行数据处理...

    #和$的区别

    综上所述,了解Struts2框架中OGNL表达式的用法及其区别对于开发高质量的Web应用程序至关重要。“#”、“$”和“%”符号在不同的场景下发挥着各自独特的作用,合理运用这些符号能够显著提升应用程序的性能和用户体验...

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

    在OGNL表达式中,`#`、`%`和``$`符号扮演着不同的角色,它们是OGNL语法的重要组成部分。下面将详细介绍这三个符号的用法。 1. `#`(哈希符号) `#`在OGNL中代表“上下文引用”或“值栈引用”。在Struts2中,请求...

    % # $ 的区别 及用法

    `#` 是Struts2框架中非常重要的一个符号,主要用于OGNL表达式的引用,以及指定特定作用域内的变量。 - **用法**: - `#variable` 直接引用一个变量。 - `#scope.variable` 引用特定作用域内的变量。 - `#...

    OGNL符号的使用

    OGNL 符号的使用 OGNL(Object-Graph Navigation Language)是一...OGNL 表达式在 Struts2 中的使用非常广泛,开发者需要充分了解“%”、“#”、“$”这三个符号的使用规则,以便更好地使用 OGNL 表达式提高开发效率。

    struts2.0标签$ # %的区别

    ### Struts2.0 标签 $ # % 的区别详解 #### 一、概述 Struts2框架作为Java Web开发中的重要组成部分,在处理MVC架构时提供了强大的支持。...掌握这些符号的使用,对于高效地开发基于Struts2的应用程序至关重要。

    ONGL中(#.%.$)三种符号的用法.pdf

    本文将深入探讨OGNL中`#`,`%`,`$`这三个特殊符号的用法。 首先,`#`符号在OGNL中的主要作用是访问Stack Context中的值,以及创建和访问特定的命名对象。例如,`#parameters`对象可以用来获取HTTP请求参数,`#...

    struts2 ognl的用法

    OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取或设置一个对象图中的属性。它在Struts2框架中扮演着极其重要的角色,是Struts2实现动态数据处理的核心技术之一。 OGNL的主要特点包括:...

    STRUTS2标签中符号_,$,%的用法示例.doc

    在STRUTS2的标签中,`#`,`$`, `%`这三种特殊符号扮演着重要的角色,尤其是在处理OGNL表达式时。下面将详细解释这三个符号的用途。 1. `#` 符号: - **访问非根对象属性**:在STRUTS2中,ActionContext是默认的根...

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

    **OGNL上下文**是Struts2框架中的一个重要概念,它指的是一个名为`ContextMap`的容器。这个容器是一个Map结构,其键为`String`类型,值为`Object`类型,用于封装所有请求过程中可能用到的数据。 1. **ContextMap的...

    ognl.rar_OGNL API_struts2 ognl api_struts2帮助文档

    OGNL(Object-Graph Navigation Language)是Struts2框架中重要的表达式语言,它用于在应用程序中进行数据绑定和表达式求值。这篇文档将详细解释OGNL API及其在Struts2框架中的应用。 首先,OGNL是一个强大的、动态...

    struts2_OGNL表达式ActionContext及valuesStack

    `%`符号在OGNL中用于在字符串属性中计算表达式。例如,`&lt;s:url value="%{#foobar['foo1']}" /&gt;`会计算`#foobar['foo1']`的值并将其插入URL。 `$`符号在Struts2中有两个主要用途。一是用于国际化资源文件,引用OGNL...

    ognl源码

    3. **值映射(Value Map)**:OGNL的上下文通常包含一个值映射,这是一个键值对的集合,用于存储和检索对象。在Struts2中,这个值映射通常是ActionContext,它包含了请求和会话中的参数。 4. **对象导航**:OGNL...

    重要知识ognl+标签.pdf

    3. **在Struts2中的使用**:Struts2标签通常与OGNL结合使用,例如`&lt;s:property value="xx" /&gt;`标签用于显示或设置值,这里的`xx`就是OGNL表达式。 4. **特殊符号的使用**: - **“#”符号**:主要用于访问上下文和...

    ognl 源码: struts2 所用的 ognl 包源码

    例如,`&lt;s:textfield name="username" /&gt;` 中的 `name` 属性就是一个 OGNL 表达式,它会尝试在值栈中找到名为 `username` 的属性并将其与输入字段关联。 7. **OGNL 安全性**: OGNL 的灵活性也可能带来安全问题,...

    OGNL API文档

    3. 函数调用:OGNL允许直接调用对象的方法,也可以使用`@`符号进行静态方法调用。 五、OGNL安全性 1. 模式匹配:在处理用户输入时,使用OGNL表达式需要谨慎,以防止恶意的代码注入。可以设置安全模式来限制表达式...

    OGNL语言指南

    ### OGNL语言指南知识...OGNL作为一种强大的表达式语言,在Java开发领域有着广泛的应用,特别是在诸如Struts2这样的框架中扮演着重要角色。掌握OGNL不仅可以提高开发效率,还能让开发者更加灵活地处理复杂的对象关系。

    Struts 2中的OGNL教程

    在使用 OGNL 时,需要注意几个符号的使用: - **#**:表示 OGNL 表达式的开始。 - **%**:用于定义 JSP 页面的脚本段。 - **$**:用于访问请求范围内的变量。 #### 五、示例:设置编码以避免乱码问题 在使用 ...

    OGNL.doc

    1. **属性访问**:OGNL通过`.`符号来访问对象的属性,如`user.name`表示获取`user`对象的`name`属性。 2. **方法调用**:可以通过`()`操作符来调用对象的方法,例如`list.sort()`对列表进行排序。 3. **索引访问**...

Global site tag (gtag.js) - Google Analytics