`
yjhexy
  • 浏览: 332249 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

Ognl 语法使用探究

阅读更多

在struts2中大量使用了OGNL 语法,当然,想学好struts当然要了解OGNL,于是开始学习了OGNL之旅。废话不多说。

直接切入主题。

我将根据OGNL的作用一一阐述和举例:

首先:

一些基本语法:

 

  1. 常量: 字符串:“ hello ” 字符:‘ h ’ 数字:除了像 java 的内置类型 int,long,float 和 double,Ognl 还有如例:10.01B,相当于 java.math.BigDecimal,使用’ b ’或者’ B ’后缀。 100000H,相当于 java.math.BigInteger,使用’ h ’ 或 ’ H ’ 后缀。
  2. 属性的引用 例如:user.name
  3. 变量的引用 例如:#name
  4. 静态变量的访问 使用 @class@field
  5. 静态方法的调用 使用 @class@method(args), 如果没有指定 class 那么默认就使用 java.lang.Math.
  6. 构造函数的调用 例如:new java.util.ArrayList();

 

 

一,读取类属性

 

 

二,写类属性

 

 

三,读写常量

 

 

四,用构造函数创建集合类

 

 

 /**
 * <pre>
 * 测试构造collection 
 * 参考http://www.opensymphony.com/ognl/html/LanguageGuide/projection.html
 * </pre>
 * 
 * @author yajun.wuyj
 */
public class OgnlCollectionConstructTest {

    public static void main(String[] args) throws OgnlException {

        // 创建链表
        List list = (List) Ognl.getValue("{ null,\"Untitled\"}", null);
        System.out.println(list);

        // 创建数组
        int[] array = (int[]) Ognl.getValue("new int[] { 1, 2, 3 }", null);
        System.out.println(array[2]);

        // 创建map
        Map map = (Map) Ognl.getValue("#{ \"foo\" :\"foo value\", \"bar\" : \"bar value\" }", null);
        System.out.println(map);
    }

} 

 

 

五,

Projecting Across Collections

 

 

/**
 * <pre>
 * 测试针对所有的elements 调用方法
 * 参考http://www.opensymphony.com/ognl/html/LanguageGuide/projection.html
 * </pre>
 * 
 * @author Administrator
 */
public class OgnlProjectingTest {

    public static void main(String[] args) throws OgnlException {
        List<String> strings = new ArrayList<String>();
        strings.add("1");
        strings.add("2");
        strings.add("3");
        System.out.println(Ognl.getValue("{ #this instanceof String ? #this : #this.toString()}", strings));
    }

}
 

六,

Selecting From Collections

 

 

/**
 * <pre>
 * 挑选指定的元素作为新的的集合
 * 参考:http://www.opensymphony.com/ognl/html/LanguageGuide/selection.html
 * </pre>
 * 
 * @author Administrator
 */
public class OgnlSelectingTest {

    public static void main(String[] args) throws OgnlException {
        OgnlContext context = new OgnlContext();
        List lists = new ArrayList();
        lists.add("string 1");
        lists.add(Integer.valueOf(1));
        lists.add("string 2");
        context.put("lists", lists);

        // 找出所有的string
        System.out.println(Ognl.getValue("lists.{? #this instanceof String}", context));

        // 找出第一个string
        System.out.println(Ognl.getValue("lists.{^ #this instanceof String}", context));

        // 找出最后一个string
        System.out.println(Ognl.getValue("lists.{$ #this instanceof String}", context));
    }
}
 

 

 

 

==========================

 

struts2中的context中,如果多个属性相同???

分享到:
评论

相关推荐

    OGNL表达式的使用及文档

    1. **表达式语法**:OGNL表达式通常由对象名、点号和属性名组成,例如`user.name`,表示获取`user`对象的`name`属性。也可以通过索引访问集合元素,如`list[0]`。 2. **上下文(Context)**:在OGNL中,上下文包含...

    struts标签和ognl语法

    OGNL 语法允许开发者在 JSP 页面上直接操作 Java 对象的属性。在上述例子中,`{?price&gt;1000}` 是一个 OGNL 过滤表达式,它返回 `price` 大于 1000 的元素。此外,OGNL 还支持链式访问(如 `obj.property1.property2`...

    OGNL语法 小资料

    根据OpenSymphony的OGNL官方文档,整理了下。简洁易懂

    ognl源代码以及api文档

    在本文中,我们将深入探讨ognl2.6.11版本的源代码和API文档,了解其核心概念、功能及使用方法。 **一、ognl基础** 1. **表达式语法**:ognl表达式由对象路径和操作组成,如`object.property`或`array[index]`,...

    ognl表达式 ognl表达式

    OGNL支持丰富的语法特性,能够方便地访问复杂的对象图。 #### 二、OGNL的基本用法 在Struts2框架中,OGNL表达式被广泛应用于视图层,比如在JSP页面中用来获取数据。OGNL表达式的语法简洁明了,例如: - **直接...

    struts2 中 OGNL表达式的使用

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

    OGNL符号的使用

    OGNL 符号的使用 OGNL(Object-Graph Navigation Language)是一种可以方便地操作对象属性的开源表达式语言。它有很多特点,例如支持对象方法调用、类静态的方法调用和值访问、赋值操作和表达式串联、访问 OGNL 上...

    使用的ognl的chm

    - Struts2和Hibernate的官方文档中也有关于OGNL使用的部分。 - 在线教程和博客文章可以帮助理解OGNL的实际应用场景和最佳实践。 总结起来,OGNL是Java开发中的强大工具,特别是在Web框架中,它简化了对象交互和数据...

    ognl源码

    为了提高性能,OGNL使用了缓存机制。解析后的AST节点和求值结果会被缓存,当遇到相同的表达式时,可以直接从缓存中获取,避免了重复解析和求值。 **6. OGNL的安全性** 虽然OGNL的强大功能使其在很多场景下非常有用...

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

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

    ognl标签的使用案例

    **ognl标签的使用案例** OGNL (Object-Graph Navigation Language) 是一种强大的表达式语言,主要用于在Java应用程序中获取和设置对象属性。在Web开发领域,尤其是与Struts2框架结合时,OGNL标签被广泛用于视图层,...

    struts2.0中的ognl

    因此,在使用OGNL时,需要谨慎处理用户输入,避免出现OGNL注入漏洞。 五、优化与最佳实践 1. 使用`@SkipValidation`注解来避免不必要的验证,提高性能。 2. 对用户输入进行过滤和转义,防止OGNL注入。 3. 合理配置...

    ognl英文帮助文档

    OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,常用于Java应用程序,特别是与Struts2框架一起使用。它允许程序开发者通过简洁的语法来访问和操作对象的属性,执行复杂的逻辑,以及动态地构建...

    OGNL教程,简单,看完懂OGNL语言

    OGNL,全称Object-Graph Navigation Language,是一种强大的表达式语言,主要用来获取和设置Java对象的属性。它的设计初衷是解决UI组件和控制器...了解和掌握OGNL的使用,对于从事Java Web开发的人员来说是十分必要的。

    ognl.jar资源包

    camel-ognl-1.6.4.jar, camel-ognl-2.8.1.jar, com.springsource.org.ognl-2.6.9.jar, com.springsource.org.ognl-sources-2.6.9.jar, ognl-2.5.1.jar, ognl-2.6.11.jar, ognl-2.6.3.jar, ognl-2.6.5.jar, ognl-...

    ognl-3.2.21-API文档-中文版.zip

    赠送jar包:ognl-3.2.21.jar; 赠送原API文档:ognl-3.2.21-javadoc.jar; 赠送源代码:ognl-3.2.21-sources.jar; 赠送Maven依赖信息文件:ognl-3.2.21.pom; 包含翻译后的API文档:ognl-3.2.21-javadoc-API文档-...

    struts2 OGNL表达式使用

    struts2 OGNL表达式使用 OGNL(Object-Graph Navigation Language)是对象图导航语言,允许开发者在Struts2应用程序中访问和操作对象及其属性。下面是OGNL表达式的使用方法: 访问基本属性 1. 访问值栈中action的...

    ognl源码及API

    在实际使用中,ognl的API提供了很多有用的工具和方法,比如`Ognl.getValue()`和`Ognl.setValue()`用于获取和设置对象属性,`Ognl.parseExpression()`用于编译表达式,`OgnlContext.put()`和`OgnlContext.remove()`...

    OGNL语言中文资料

    这篇中文资料将帮助你深入理解OGNL的核心概念、语法特性以及实际应用。 一、OGNL的基础知识 1. **对象导航**:OGNL的名称来源于其核心功能——对象图导航。它可以轻松地遍历对象的属性,甚至通过链式调用来访问嵌套...

    ognl-3.0.21.jar ognl.jar

    标题中的“ognl-3.0.21.jar”和“ognl.jar”是指OGNL(Object-Graph Navigation Language)的特定版本...了解并熟练使用OGNL能够提升Java应用的灵活性和可维护性,但同时也需要注意安全问题,防止潜在的代码注入攻击。

Global site tag (gtag.js) - Google Analytics