下面几个javaBean的getXXX()和setXXX()方法省略
Address.java
public class Address
{
private String homeAddress;
private String companyAddress;
.........
}
Pet.java
package dong.application.ognl;
public class Pet
{
private String name;
private String color;...................
}
Person.java
package dong.application.ognl;
import java.util.List;
public class Person
{
private String name;
private int age;
private String[] friends;
private List<Pet> pets;
private Address address;
.....
}
MyObject.java
package dong.application.ognl;
public class MyObject
{
private String name;
private int age;
....
}
OGNLTest
package dong.application.ognl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import ognl.Ognl;
import ognl.OgnlContext;
public class OgnlTest
{
static final public int a = 9;
public static void main(String[] args) throws Exception
{
OgnlContext context = new OgnlContext();
Pet p1 = new Pet("cat", "white");
Pet p2 = new Pet("dog", "black");
List<Pet> pets = new ArrayList<Pet>();
pets.add(p1);
pets.add(p2);
String[] friends = new String[]
{ "huiping", "xiaole", "linfang" };
Address address = new Address("jiyuan", "xuchang");
Person person = new Person("dongdong", 22, friends, pets, address);
context.put("person", person);
MyObject myo = new MyObject("xiaojing", 21);
context.put("wife", myo);
context.setRoot(myo);
Object o1 = Ognl.parseExpression("name");
Object o2 = Ognl.getValue(o1, context, context.getRoot());
System.out.println(o1 + "\t" + o2);
System.out.println("================我是分割线================");
Object o3 = Ognl.parseExpression("friends[0]");
// 注意此处填写根元素的时候,最好要动态获取,如果手动指定,则会以指定的为主
Object o4 = Ognl.getValue(o3, context, person);
// Object o4 = Ognl.getValue(o3, context, context.getRoot());
System.out.println(o3 + "\t" + o4);
System.out.println("================我是分割线================");
Object o5 = Ognl.parseExpression("#person.address.homeAddress");
Object o6 = Ognl.getValue(o5, context, context.getRoot());
System.out.println(o5 + "\t" + o6);
System.out.println("================我是分割线================");
// 可以调用方法
Object o7 = Ognl.parseExpression("#person.name.toUpperCase()");
Object o8 = Ognl.getValue(o7, context, context.getRoot());
System.out.println(o7 + "\t" + o8);
System.out.println("================我是分割线================");
Object o9 = Ognl
.parseExpression("@java.lang.Integer@toBinaryString(20)");
Object o10 = Ognl.getValue(o9, context, context.getRoot());
System.out.println(o9 + "\t" + o10);
System.out.println("================我是分割线================");
Object o11 = Ognl.parseExpression("new java.util.LinkedList()");
Object o12 = Ognl.getValue(o11, context, context.getRoot());
System.out.println(o11 + "\t" + o12);
System.out.println("================我是分割线================");
Object o111 = Ognl.parseExpression("new java.awt.Frame()");
Object o121 = Ognl.getValue(o111, context, context.getRoot());
System.out.println(o111 + "\t" + o121);
System.out.println("================我是分割线================");
Object o13 = Ognl.parseExpression("@@abs(-55)");
Object o14 = Ognl.getValue(o13, context, context.getRoot());
System.out.println(o13 + "\t" + o14);
System.out.println("================我是分割线================");
Object o15 = Ognl.getValue(
"#{'dongdong':'jingjing','dong':'jing'}['dongdong']", context,
context.getRoot());
System.out.println(o15);
System.out.println("================我是分割线================");
List<MyObject> list = new ArrayList<MyObject>();
list.add(new MyObject("dongdong", 22));
list.add(new MyObject("jingjing", 21));
list.add(new MyObject("dong", 22));
list.add(new MyObject("jing", 21));
context.put("list", list);
// Object o1111 = Ognl.getValue("#list.name", context,
// context.getRoot());
// System.out.println(o1111);
// 过滤(filtering),collection.{? expression}
Object o16 = Ognl.getValue("#list.{? #this.name.length()<6}[0].name",
context, context.getRoot());
System.out.println(o16);
System.out.println("================我是分割线================");
// 过滤(filtering),获取到集合中的第一个元素, collection.{^ expression}
Object o17 = Ognl.getValue("#list.{^ #this.name.length()<6}[0].name",
context, context.getRoot());
System.out.println(o17);
System.out.println("================我是分割线================");
// 过滤(filtering),获取到集合中的第一个元素, collection.{$ expression}
Object o18 = Ognl.getValue("#list.{$ #this.name.length()<6}[0].name",
context, context.getRoot());
System.out.println(o18);
System.out.println("================我是分割线================");
// 投影(projection), collection. {expression}
Object o19 = Ognl.getValue("#list.{name}", context, context.getRoot());
System.out.println(o19);
System.out.println("================我是分割线================");
// OGNL支持三元运算符
Object o20 = Ognl.getValue(
"#list.{#this.name.length()<6?'love xiaojing':#this.name}",
context, context.getRoot());
System.out.println(o20);
}
}
运行结果
name xiaojing
================我是分割线================
friends[0] huiping
================我是分割线================
#person.address.homeAddress jiyuan
================我是分割线================
#person.name.toUpperCase() DONGDONG
================我是分割线================
@java.lang.Integer@toBinaryString(20) 10100
================我是分割线================
new java.util.LinkedList() []
================我是分割线================
new java.awt.Frame() java.awt.Frame[frame0,0,0,0x0,invalid,hidden,layout=java.awt.BorderLayout,title=,resizable,normal]
================我是分割线================
@java.lang.Math@abs(-55) 55
================我是分割线================
jingjing
================我是分割线================
dong
================我是分割线================
dong
================我是分割线================
jing
================我是分割线================
[dongdong, jingjing, dong, jing]
================我是分割线================
[dongdong, jingjing, love xiaojing, love xiaojing]
分享到:
相关推荐
### 学习OGNL在Struts2中的工作原理 #### OGNL简介 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。它是Struts2框架的一个核心特性之一,被广泛应用于框架的...
OGNL(Object-Graph ...总结,OGNL作为强大的表达式语言,提供了一种灵活的方式来操作和访问Java对象的属性。通过深入学习和实践,开发者能够有效地利用OGNL进行数据绑定和表达式计算,提升代码的可读性和效率。
总结,OGNL作为Java生态系统中的一个重要组成部分,其源码研究可以帮助开发者更高效地利用这一工具,同时加深对Java反射、动态类型和表达式语言设计的理解。通过深入学习,开发者可以更好地解决实际问题,提升开发...
**OGNL(Object-Graph Navigation Language)源码详解** OGNL,全称为对象图导航语言,是一种强大的表达式...通过深入学习OGNL源码,开发者可以更好地掌握其内部机制,从而在Java应用程序中更灵活、安全地使用OGNL。
**OGNL(Object-Graph Navigation Language)**是一种...总结起来,OGNL是Java开发中的强大工具,特别是在Web框架中,它简化了对象交互和数据绑定。深入理解和掌握OGNL,能够提升代码的灵活性和可读性,提高开发效率。
总结来说,"ognl.rar_OGNL API_og_ognl"这个压缩包对Java开发者,尤其是那些使用Struts2或其他依赖OGNL的框架的开发者来说,是非常有价值的资源。它涵盖了OGNL的基本概念、API使用、源码学习和开发实践,是提升对...
OGNL 表达式的语法非常直观且易于学习。下面是一些基本概念: - **属性访问**:`object.property`,用于获取对象的属性值。 - **方法调用**:`object.method()`,用于调用对象的方法。 - **数组和集合访问**:`...
### Struts2中OGNL的使用详解 ...理解并熟练掌握OGNL的使用,对于深入学习和高效开发基于Struts2的应用程序至关重要。通过本文对OGNL在Struts2中的应用场景和使用技巧的介绍,希望能帮助开发者更好地利用这一强大工具。
OGNL(Object-Graph Navigation ...总结,OGNL是Java Web开发中的强大工具,理解和运用好OGNL可以极大地提升代码的可读性和维护性。通过深入学习,你可以更好地驾驭这门表达式语言,为你的Web应用开发带来便利。
总结起来,"struts2对Ognl的封装--PropertyAccessor"是关于Struts2框架如何利用OGNL语言访问和操作对象属性的关键技术。了解这一机制对于开发高效的Struts2应用至关重要,特别是当需要处理复杂的对象模型或进行定制...
总结,OGNL API文档是Java开发者的重要参考资料,它详细阐述了OGNL的语法、操作和应用,帮助开发者更好地理解和使用这一强大的表达式语言。通过深入学习和实践,开发者能够提升其在MVC框架中数据绑定和动态逻辑处理...
Ognl库提供的jar包是运行时使用的编译后版本,而源码包则是供开发者查看和学习Ognl内部实现的。 1. OGNL 1.x 版本: OGNL 1.x 是早期的版本,主要特点可能包括基础的属性访问和表达式支持。在这个阶段,OGNL可能还...
学习这些示例有助于理解OGNL在实际项目中的应用。 **8. 总结** OGNL标签大大简化了Struts2框架中的数据绑定和条件控制,提供了强大而灵活的表达式语言。通过熟练掌握OGNL,开发者可以更高效地构建Web应用的视图层,...
总结,Struts2 OGNL是框架中不可或缺的部分,提供了强大的数据绑定和表达式执行能力。然而,它的灵活性也带来了安全风险,因此开发者需要了解其工作原理并采取适当的安全措施。通过深入学习和实践,我们可以更好地...
总结,"OGNL表达式2讲"是一个深入学习OGNL表达式的资源,涵盖了OGNL的基本语法、与标签的配合、集合操作、上下文访问以及安全性考虑。通过案例学习,有助于开发者更好地理解和应用OGNL在实际项目中的功能。记得下载...
总结,OGNL是Java Web开发中的重要工具,它的灵活性和表达能力极大地简化了数据绑定和对象操作。掌握OGNL的使用,能有效提高开发效率,同时也需要注意其潜在的安全风险。通过深入学习和实践,开发者可以更熟练地运用...
5. **EL表达式与OGNL表达式的比较**:尽管学习了OGNL表达式,但在实际项目中,EL表达式仍然是非常有用的。特别是对于简单的数据获取场景,EL表达式因其简洁性和安全性而被广泛采用。 #### 二、OGNL上下文-...
这是我自己在学习过程对OGNL的理解,分享给新手学习,只想做点贡献,如有总结错误的地方,请见谅,并提示,改正,谢谢。
总结,Struts2和OGNL的结合提供了强大的数据绑定和表达式能力,极大地简化了Java Web开发。然而,理解其内部工作原理,掌握安全最佳实践,是充分利用这个框架并避免潜在问题的关键。通过深入学习和实践,开发者可以...
通过对OGNL2.6.11和XWork2.1.2源码的学习,开发者不仅可以掌握这两个框架的基本使用,还能深入了解它们的设计思想和实现方式,这对于提升Java Web开发的专业技能和解决实际问题具有极大的价值。同时,源码分析也有助...