`
wlzjdm
  • 浏览: 26335 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

OGNL学习总结

阅读更多

下面几个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在Struts2中的工作原理 #### OGNL简介 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。它是Struts2框架的一个核心特性之一,被广泛应用于框架的...

    OGNL表达式的使用及文档

    OGNL(Object-Graph ...总结,OGNL作为强大的表达式语言,提供了一种灵活的方式来操作和访问Java对象的属性。通过深入学习和实践,开发者能够有效地利用OGNL进行数据绑定和表达式计算,提升代码的可读性和效率。

    ognl源码.rar

    总结,OGNL作为Java生态系统中的一个重要组成部分,其源码研究可以帮助开发者更高效地利用这一工具,同时加深对Java反射、动态类型和表达式语言设计的理解。通过深入学习,开发者可以更好地解决实际问题,提升开发...

    ognl源码

    **OGNL(Object-Graph Navigation Language)源码详解** OGNL,全称为对象图导航语言,是一种强大的表达式...通过深入学习OGNL源码,开发者可以更好地掌握其内部机制,从而在Java应用程序中更灵活、安全地使用OGNL。

    使用的ognl的chm

    **OGNL(Object-Graph Navigation Language)**是一种...总结起来,OGNL是Java开发中的强大工具,特别是在Web框架中,它简化了对象交互和数据绑定。深入理解和掌握OGNL,能够提升代码的灵活性和可读性,提高开发效率。

    ognl.rar_OGNL API_og_ognl

    总结来说,"ognl.rar_OGNL API_og_ognl"这个压缩包对Java开发者,尤其是那些使用Struts2或其他依赖OGNL的框架的开发者来说,是非常有价值的资源。它涵盖了OGNL的基本概念、API使用、源码学习和开发实践,是提升对...

    JS:ognl表达式

    OGNL 表达式的语法非常直观且易于学习。下面是一些基本概念: - **属性访问**:`object.property`,用于获取对象的属性值。 - **方法调用**:`object.method()`,用于调用对象的方法。 - **数组和集合访问**:`...

    struts2 ognl的用法

    ### Struts2中OGNL的使用详解 ...理解并熟练掌握OGNL的使用,对于深入学习和高效开发基于Struts2的应用程序至关重要。通过本文对OGNL在Struts2中的应用场景和使用技巧的介绍,希望能帮助开发者更好地利用这一强大工具。

    ognl表达式

    OGNL(Object-Graph Navigation ...总结,OGNL是Java Web开发中的强大工具,理解和运用好OGNL可以极大地提升代码的可读性和维护性。通过深入学习,你可以更好地驾驭这门表达式语言,为你的Web应用开发带来便利。

    struts2对Ognl的封装--PropertyAccessor

    总结起来,"struts2对Ognl的封装--PropertyAccessor"是关于Struts2框架如何利用OGNL语言访问和操作对象属性的关键技术。了解这一机制对于开发高效的Struts2应用至关重要,特别是当需要处理复杂的对象模型或进行定制...

    OGNL API文档

    总结,OGNL API文档是Java开发者的重要参考资料,它详细阐述了OGNL的语法、操作和应用,帮助开发者更好地理解和使用这一强大的表达式语言。通过深入学习和实践,开发者能够提升其在MVC框架中数据绑定和动态逻辑处理...

    Ognl jar包和源码包(含3个版本:1-3)

    Ognl库提供的jar包是运行时使用的编译后版本,而源码包则是供开发者查看和学习Ognl内部实现的。 1. OGNL 1.x 版本: OGNL 1.x 是早期的版本,主要特点可能包括基础的属性访问和表达式支持。在这个阶段,OGNL可能还...

    ognl标签的使用案例

    学习这些示例有助于理解OGNL在实际项目中的应用。 **8. 总结** OGNL标签大大简化了Struts2框架中的数据绑定和条件控制,提供了强大而灵活的表达式语言。通过熟练掌握OGNL,开发者可以更高效地构建Web应用的视图层,...

    Struts2 ognl

    总结,Struts2 OGNL是框架中不可或缺的部分,提供了强大的数据绑定和表达式执行能力。然而,它的灵活性也带来了安全风险,因此开发者需要了解其工作原理并采取适当的安全措施。通过深入学习和实践,我们可以更好地...

    OGNL表达式2讲

    总结,"OGNL表达式2讲"是一个深入学习OGNL表达式的资源,涵盖了OGNL的基本语法、与标签的配合、集合操作、上下文访问以及安全性考虑。通过案例学习,有助于开发者更好地理解和应用OGNL在实际项目中的功能。记得下载...

    OGNL网上资料整理

    总结,OGNL是Java Web开发中的重要工具,它的灵活性和表达能力极大地简化了数据绑定和对象操作。掌握OGNL的使用,能有效提高开发效率,同时也需要注意其潜在的安全风险。通过深入学习和实践,开发者可以更熟练地运用...

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

    5. **EL表达式与OGNL表达式的比较**:尽管学习了OGNL表达式,但在实际项目中,EL表达式仍然是非常有用的。特别是对于简单的数据获取场景,EL表达式因其简洁性和安全性而被广泛采用。 #### 二、OGNL上下文-...

    理解OGNL 表达式

    这是我自己在学习过程对OGNL的理解,分享给新手学习,只想做点贡献,如有总结错误的地方,请见谅,并提示,改正,谢谢。

    Struts2 & OGNL

    总结,Struts2和OGNL的结合提供了强大的数据绑定和表达式能力,极大地简化了Java Web开发。然而,理解其内部工作原理,掌握安全最佳实践,是充分利用这个框架并避免潜在问题的关键。通过深入学习和实践,开发者可以...

    ognl2.6.11源码和xwork2.1.2源码

    通过对OGNL2.6.11和XWork2.1.2源码的学习,开发者不仅可以掌握这两个框架的基本使用,还能深入了解它们的设计思想和实现方式,这对于提升Java Web开发的专业技能和解决实际问题具有极大的价值。同时,源码分析也有助...

Global site tag (gtag.js) - Google Analytics