博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ognl底层使用
阅读量:6689 次
发布时间:2019-06-25

本文共 3869 字,大约阅读时间需要 12 分钟。

今天,在得知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
persons = new ArrayList
(); 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@PI3.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]======

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

你可能感兴趣的文章
Java 二分查找
查看>>
刚刚,阿里开源了一项重磅炸弹,终结程序员“中年危机”!
查看>>
《Spring Boot开发:从0到1》图片
查看>>
教你十分钟构建好 SpringBoot + SSM 框架
查看>>
吸烟场景运营商“烟客”获2000万元Pre-A轮融资,用于线下吸烟空间建设
查看>>
未来 Docker 的安全
查看>>
基于Android ActionBar的SearchView实时搜索结果
查看>>
spring boot +RabbitMQ +InfluxDB+Grafara监控实践
查看>>
马斯克的另一番“威胁论”:人类将成为人工智能的“宠物”
查看>>
Python 正则表达式(字符)详解
查看>>
Kali Linux 网络扫描秘籍 第三章 端口扫描(一)
查看>>
共享单车步入物联网军备战
查看>>
PHP 魔术变量
查看>>
推荐的PHP编码规范
查看>>
Gartner报告:东方金信进入Hadoop世界厂商名录
查看>>
Python_(1)数据类型及其常见使用方法(图文)
查看>>
如何查看WWN号
查看>>
主页被劫持问题
查看>>
linux中awk学习小结
查看>>
WCF分布式开发常见错误(23):the fact that the server certificate isn't configured with HTTP.SYS...
查看>>