• Ognl底层使用


    今天,在得知ognl采用。在这里和大家分享一下。我希望能帮助。


    package com.hcj.test;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import ognl.Ognl;
    import ognl.OgnlContext;
    import ognl.OgnlException;
    
    public class Test {
    	public static void main(String[] args) throws OgnlException {
    		Person p = new Person();
    		p.setName("张三");
    		
    		Cat cat = new Cat();
    		cat.setName("花猫");
    		
    		//创建ognl上下文
    		OgnlContext ognlContext = new OgnlContext();
    		ognlContext.put("person", p);
    		ognlContext.put("cat", cat);
    		//设置person根对象
    		ognlContext.setRoot(p);
    		//获取根对象
    		Object root = ognlContext.getRoot();
    		
    		//获取根对象的属性
    		Object obj1 = Ognl.parseExpression("name");
    		System.out.println(obj1);
    		Object value1 = Ognl.getValue(obj1, ognlContext, root);
    		System.out.println(value1);
    		System.out.println("==========");
    		
    		//訪问非根对象的属性
    		Object obj2 = Ognl.parseExpression("#cat.name");
    		System.out.println(obj2);
    		Object value2 = Ognl.getValue(obj2, ognlContext, root);
    		System.out.println(value2);
    		System.out.println("==========");
    		
    		//訪问类的静态方法
    		Object obj3 = Ognl.parseExpression("@java.lang.Math@PI");
    		System.out.println(obj3);
    		Object value3 = Ognl.getValue(obj3, ognlContext, root);
    		System.out.println(value3);
    		System.out.println("======");
    		
    		//訪问math方法
    		Object obj4 = Ognl.parseExpression("@@max(1,3)");
    		System.out.println(obj4);
    		Object value4 = Ognl.getValue(obj4, ognlContext, root);
    		System.out.println(value4);
    		System.out.println("======");
    		
    		//创建对象
    		Object obj5 = Ognl.parseExpression("new com.hcj.test.Cat()");
    		System.out.println(obj5);
    		Object value5 = Ognl.getValue(obj5, ognlContext, root);
    		System.out.println(value5);
    		System.out.println("======");
    		
    		//创建list对象
    		Object obj6 = Ognl.parseExpression("{'a','b','c'}");
    		System.out.println(obj6);
    		Object value6 = Ognl.getValue(obj6, ognlContext, root);
    		System.out.println(value6);
    		System.out.println("======");
    		
    		//訪问list对象属性
    		Object obj7 = Ognl.parseExpression("{'a','b','c'}[1]");
    		System.out.println(obj7);
    		Object value7 = Ognl.getValue(obj7, ognlContext, root);
    		System.out.println(value7);
    		System.out.println("======");
    		
    		//创建map对象
    		Object obj8 = Ognl.parseExpression("#{'1':'aa', '2':'bb', '3':'cc'}");
    		System.out.println(obj8);
    		Object value8 = Ognl.getValue(obj8, ognlContext, root);
    		System.out.println(value8);
    		System.out.println("======");
    		
    		//訪问map对象属性
    		Object obj9 = Ognl.parseExpression("#{'1':'aa', '2':'bb', '3':'cc'}['3']");
    		System.out.println(obj9);
    		Object value9 = Ognl.getValue(obj9, ognlContext, root);
    		System.out.println(value9);
    		System.out.println("======");
    		
    		//选择,格式: collection.{? expression}
    		List<Person> persons = new ArrayList<Person>();
    		Person p1 = new Person();
    		p1.setName("zz12345");
    		Person p2 = new Person();
    		p2.setName("aa121312");
    		Person p3 = new Person();
    		p3.setName("bb");
    		
    		persons.add(p1);
    		persons.add(p2);
    		persons.add(p3);
    		//将persons放入ognl上下文中
    		ognlContext.put("persons", persons);
    		
    		Object obj10 = Ognl.parseExpression("#persons.{?

    #this.name.length() > 2}"); System.out.println(obj10); Object value10 = Ognl.getValue(obj10, ognlContext, root); System.out.println(value10); System.out.println("======"); //投影,格式: collection.{?

    expression} Object obj11 = Ognl.parseExpression("#persons.{#this.name}"); System.out.println(obj11); Object value11 = Ognl.getValue(obj11, ognlContext, root); System.out.println(value11); System.out.println("======"); } }


    输出结果:

    name
    张三
    ==========
    #cat.name
    花猫
    ==========
    @java.lang.Math@PI
    3.141592653589793
    ======
    @java.lang.Math@max(1, 3)
    3
    ======
    new com.hcj.test.Cat()
    com.hcj.test.Cat@1dff3a2
    ======
    { 'a', 'b', 'c' }
    [a, b, c]
    ======
    { 'a', 'b', 'c' }[1]
    b
    ======
    #{ '1' : "aa", '2' : "bb", '3' : "cc" }
    {1=aa, 2=bb, 3=cc}
    ======
    #{ '1' : "aa", '2' : "bb", '3' : "cc" }['3']
    cc
    ======
    #persons.{? (#this.name.length() > 2) }
    [com.hcj.test.Person@b988a6, com.hcj.test.Person@ba6c83]
    ======
    #persons.{ #this.name }
    [zz12345, aa121312, bb]
    ======
    


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    [Ansible]copy 模块
    [Ansible]script模块
    [Ansible]command shell模块
    [Ansible]Systemd 模块
    [Ansible]YUM 模块
    [Ansible]yum_repository模块 添加 删除yum源
    [Ceph]osd 无法启动 start request repeated too quickly for ceph-osd@1.service
    [Ceph]pool 删除 Error EPERM: pool deletion is disabled; you must first set the mon_allow_pool_delete config option to true before you can destroy a pool
    题解 烷基计数 加强版 加强版
    Polya 定理 学习笔记
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4823963.html
Copyright © 2020-2023  润新知