`
wlzjdm
  • 浏览: 26052 次
  • 性别: 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]
 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics