在struts2中大量使用了OGNL 语法,当然,想学好struts当然要了解OGNL,于是开始学习了OGNL之旅。废话不多说。
直接切入主题。
我将根据OGNL的作用一一阐述和举例:
首先:
一些基本语法:
- 常量: 字符串:“ hello ” 字符:‘ h ’ 数字:除了像 java 的内置类型 int,long,float 和 double,Ognl 还有如例:10.01B,相当于 java.math.BigDecimal,使用’ b ’或者’ B ’后缀。 100000H,相当于 java.math.BigInteger,使用’ h ’ 或 ’ H ’ 后缀。
- 属性的引用 例如:user.name
- 变量的引用 例如:#name
- 静态变量的访问 使用 @class@field
- 静态方法的调用 使用 @class@method(args), 如果没有指定 class 那么默认就使用 java.lang.Math.
- 构造函数的调用 例如: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中,如果多个属性相同???
分享到:
相关推荐
1. **表达式语法**:OGNL表达式通常由对象名、点号和属性名组成,例如`user.name`,表示获取`user`对象的`name`属性。也可以通过索引访问集合元素,如`list[0]`。 2. **上下文(Context)**:在OGNL中,上下文包含...
OGNL 语法允许开发者在 JSP 页面上直接操作 Java 对象的属性。在上述例子中,`{?price>1000}` 是一个 OGNL 过滤表达式,它返回 `price` 大于 1000 的元素。此外,OGNL 还支持链式访问(如 `obj.property1.property2`...
根据OpenSymphony的OGNL官方文档,整理了下。简洁易懂
在本文中,我们将深入探讨ognl2.6.11版本的源代码和API文档,了解其核心概念、功能及使用方法。 **一、ognl基础** 1. **表达式语法**:ognl表达式由对象路径和操作组成,如`object.property`或`array[index]`,...
OGNL支持丰富的语法特性,能够方便地访问复杂的对象图。 #### 二、OGNL的基本用法 在Struts2框架中,OGNL表达式被广泛应用于视图层,比如在JSP页面中用来获取数据。OGNL表达式的语法简洁明了,例如: - **直接...
struts2 中 OGNL表达式的使用struts2 中 OGNL表达式的使用
OGNL 符号的使用 OGNL(Object-Graph Navigation Language)是一种可以方便地操作对象属性的开源表达式语言。它有很多特点,例如支持对象方法调用、类静态的方法调用和值访问、赋值操作和表达式串联、访问 OGNL 上...
- Struts2和Hibernate的官方文档中也有关于OGNL使用的部分。 - 在线教程和博客文章可以帮助理解OGNL的实际应用场景和最佳实践。 总结起来,OGNL是Java开发中的强大工具,特别是在Web框架中,它简化了对象交互和数据...
为了提高性能,OGNL使用了缓存机制。解析后的AST节点和求值结果会被缓存,当遇到相同的表达式时,可以直接从缓存中获取,避免了重复解析和求值。 **6. OGNL的安全性** 虽然OGNL的强大功能使其在很多场景下非常有用...
本案例提供ognl使用详解,测试通过,只需解压放入自己WEB项目中,执行struts_ognl包内java文件即可(未提供jia包,若需要可以联系留言发至邮箱),若测试不好可以联系本人提供指导. Struts 2默认的表达式语言是OGNL...
**ognl标签的使用案例** OGNL (Object-Graph Navigation Language) 是一种强大的表达式语言,主要用于在Java应用程序中获取和设置对象属性。在Web开发领域,尤其是与Struts2框架结合时,OGNL标签被广泛用于视图层,...
因此,在使用OGNL时,需要谨慎处理用户输入,避免出现OGNL注入漏洞。 五、优化与最佳实践 1. 使用`@SkipValidation`注解来避免不必要的验证,提高性能。 2. 对用户输入进行过滤和转义,防止OGNL注入。 3. 合理配置...
OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,常用于Java应用程序,特别是与Struts2框架一起使用。它允许程序开发者通过简洁的语法来访问和操作对象的属性,执行复杂的逻辑,以及动态地构建...
OGNL,全称Object-Graph Navigation Language,是一种强大的表达式语言,主要用来获取和设置Java对象的属性。它的设计初衷是解决UI组件和控制器...了解和掌握OGNL的使用,对于从事Java Web开发的人员来说是十分必要的。
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-...
赠送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表达式使用 OGNL(Object-Graph Navigation Language)是对象图导航语言,允许开发者在Struts2应用程序中访问和操作对象及其属性。下面是OGNL表达式的使用方法: 访问基本属性 1. 访问值栈中action的...
在实际使用中,ognl的API提供了很多有用的工具和方法,比如`Ognl.getValue()`和`Ognl.setValue()`用于获取和设置对象属性,`Ognl.parseExpression()`用于编译表达式,`OgnlContext.put()`和`OgnlContext.remove()`...
这篇中文资料将帮助你深入理解OGNL的核心概念、语法特性以及实际应用。 一、OGNL的基础知识 1. **对象导航**:OGNL的名称来源于其核心功能——对象图导航。它可以轻松地遍历对象的属性,甚至通过链式调用来访问嵌套...
标题中的“ognl-3.0.21.jar”和“ognl.jar”是指OGNL(Object-Graph Navigation Language)的特定版本...了解并熟练使用OGNL能够提升Java应用的灵活性和可维护性,但同时也需要注意安全问题,防止潜在的代码注入攻击。