OGNL表达式

本文详细介绍了OGNL(Object-Graph Navigation Language)的核心特性,包括支持对象操作、静态成员访问、灵活的Ognl上下文访问规则以及对集合的高效操作。通过这些内容,读者可以深入了解OGNL在表达式评估和数据访问上的强大能力。

OGNL三要素: 表达式 、OgnlContext 上下文、Root 根

1.支持对象操作
	@Test
	public void test1() throws OgnlException {
		//1.获取上下文对象OgnlContext
		OgnlContext context = new OgnlContext();
		//2.操作
		Object root = context.getRoot();
		Object value = Ognl.getValue("'hello'.length()", context, root);
		
		System.out.println(value);
	}
2.支持静态成员访问
@Test
	public void test2() throws OgnlException {
		OgnlContext context = new OgnlContext();
		
		Object value = Ognl.getValue("@java.lang.Math@random()", context, context.getRoot());
		Object value2 = Ognl.getValue("@java.lang.Math@PI", context, context.getRoot());
		System.out.println(value);
		System.out.println(value2);
	}
3.访问Ognl上下文(如果从根中获取数据,不需要添加#号,如果不是从根中获取,需要#)
@Test
	public void test3() throws OgnlException {
		//1.获取上下文对象
		OgnlContext context = new OgnlContext();
		//2.向上下文中存储数据
		context.put("username","tom");
		//3.操作
		//如果从根中获取数据,不需要添加#号,如果不是从根中获取,需要#
		Object value = Ognl.getValue("#username", context, context.getRoot());
		System.out.println(value);
		
	}
	
	@Test
	public void test4() throws OgnlException {
		//1.获取上下文对象
		OgnlContext context = new OgnlContext();
		//2.存储数据
		Map<String,String> map = new HashMap<String,String>();
		map.put("username", "Jane");
		//将map存储到context的根中
		context.setRoot(map);
		//操作
		//如果从根中获取数据,不需要添加#号,如果不是从根中获取,需要#
		Object value = Ognl.getValue("username", context, context.getRoot());
		System.out.println(value);
	}

4.操作集合(支持赋值操作与表达式串联)

@Test
	public void test1() throws OgnlException {
		//1.获取上下文对象OgnlContext
		OgnlContext ognlContext = new OgnlContext();
		
		//2.操作
		//相当于创建了一个List集合
		Object value = Ognl.getValue("{'hello','world','well'}", ognlContext, ognlContext.getRoot());
		ognlContext.setRoot(value);
		//3.获取list中的第一个值
		System.out.println(Ognl.getValue("[0]",ognlContext, ognlContext.getRoot()));
	}
	
	@Test 
	public void test2() throws OgnlException {
		//1.获取上下文对象OgnlContext
		OgnlContext ognlContext = new OgnlContext();
		//2.操作
		//相当于创建了一个map集合
		Object value = Ognl.getValue("#{'username':'tom','age':23}", ognlContext, ognlContext.getRoot());
		ognlContext.setRoot(value);
		//3.获取map中的值
		System.out.println(Ognl.getValue("username", ognlContext,ognlContext.getRoot()));
		//只会返回最后一个属性的值,即age=20
		System.out.println(Ognl.getValue("username='Jane',age=20", ognlContext,ognlContext.getRoot()));

		
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值