Java中使用Ognl表达式引擎

一、Ognl简介

OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。

二、Ognl应用场景

简单地说,Ognl最大的作用就是支持 name.field1.field2.value 方式的取值。如果你的应用需要用到这方面的功能,你可能就需要使用到Ognl了,比如用户要输入Ognl表达式从上下文中取值。

最出名的,也就是Struts框架就运用了Ognl表达式,从而在jsp中使用Ognl进行取值。

三、使用示例

3.1 引入maven依赖

	
	
	    ognl
	    ognl
	    2.7.3
	

3.2 示例代码

package org.lin.hello;

import java.util.HashMap;
import java.util.Map;

import ognl.Ognl;
import ognl.OgnlException;

public class HelloOgnl {
	public static class User {
		private String username;
		public User(String username) {
			super();
			this.username = username;
		}
		public String getUsername() {
			return username;
		}
		public void setUsername(String username) {
			this.username = username;
		}
	}
	
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static void main(String[] args) throws OgnlException {
		//Ognl表达式的“根节点”
		Map root = new HashMap();
		root.put("jack", new User("jack"));
		//Ognl上下文 
		Map context = Ognl.createDefaultContext(root);
		context.put("lucy", new User("lucy"));
		//非根节点取值需要#开头
		Object expression = Ognl.parseExpression("#lucy.username");
		Object value = Ognl.getValue(expression, context, root);
		System.out.println(value);
		//根节点取值不需要#
		Object expression2 = Ognl.parseExpression("jack.username");
		System.out.println(Ognl.getValue(expression2, context, root));
	}
}


 

你可能感兴趣的:(Ognl)