下面几个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]