Struts2:OGNL表达式

本文详细介绍了OGNL(Object-Graph Navigation Language),它是一种强大的表达式语言,常用于Java对象属性的访问。内容包括OGNL的三要素:表达式、Root对象和上下文环境,以及OGNL的基本语法,如对象访问、上下文访问、静态变量访问、方法调用、数组和集合操作、投影与选择以及运算符的使用。在Struts2框架中,OGNL广泛应用于值栈和ActionContext的交互。
摘要由CSDN通过智能技术生成

OGNL表达式

OGNL(Object-Graph Navigation Language)的全称是对象图导航语言,是一个用来获取和设置java对象属性的表达式语言的开源表达式语言,通过使用表达式语法导航对象图,而不是直接调用对象的获取和设置方法。同时它可以提供许多应用,比如在XML文件或者脚本文件中嵌入OGNL表达式语法,在JSP页面使用OGNL表达式语法。

OGNL的三要素

一、表达式:

表达式(Expression)是整个OGNL的核心内容,所有的OGNL操作都是针对表达式解析后进行的。通过表达式来告诉OGNL操作到底要干些什么。因此,表达式其实是一个带有语法含义的字符串,整个字符串将规定操作的类型和内容。OGNL表达式支持大量的表达式,如“链式访问对象”、表达式计算、甚至还支持Lambda表达式。

二、Root对象:

OGNL的Root对象可以理解为OGNL的操作对象。当我们指定了一个表达式的时候,我们需要指定这个表达式针对的是哪个具体的对象。而这个具体的对象就是Root对象,这就意味着,如果有一个OGNL表达式,那么我们需要针对Root对象来进行OGNL表达式的计算并且返回结果。

三、上下文环境:

有个Root对象和表达式,我们就可以使用OGNL进行简单的操作了,如对Root对象的赋值与取值操作。但是,实际上在OGNL的内部,所有的操作都会在一个特定的数据环境中运行。这个数据环境就是上下文环境(Context)。OGNL的上下文环境是一个Map结构,称之为OgnlContext。Root对象也会被添加到上下文环境当中去。

OGNL的基本语法

1、对Root对象的访问(不需要加#)

OGNL使用的是一种链式的风格进行对象的访问。代码如下:

@Test
public void testOgnl() {
	User user = new User("rcx", "123");
	Address address = new Address("110003", "沈阳市和平区");
	user.setAddress(address);
	try {
		System.out.println(Ognl.getValue("name", user));
		System.out.println(Ognl.getValue("address", user));
		System.out.println(Ognl.getValue("address.port", user));
	} catch (OgnlException e) {
		e.printStackTrace();
	}
}

2、对上下文对象的访问(需要加#)

使用OGNL的时候如果不设置上下文对象,系统会自动创建一个上下文对象,如果传入的参数当中包含了上下文对象则会使用传入的上下文对象。当访问上下文环境当中的参数时候,需要在表达式前面加上'#',表示了与访问Root对象的区别。代码如下:

@Test
public void testOgnl() {
	User user = new User("rcx", "123");
	Address address = new Address("110003", "沈阳市和平区");
	user.setAddress(address);
	Map<String, Object> context = new Has
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值