OGNL学习小结
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]