OGNL是Object-Graph NavigationLanguage的缩写,它是一种功能强大的表达式语言(ExpressionLanguage,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。(百度百科来的--)
关于ognl的表达式,我们主要使用在struts2的一些使标签调用上,那么一般来说有三种情况:
1、直接通过“名字.属性”来使用,如“person.username”,因为ongl是从值栈(ValueStack)里把值拿出来,而struts2里值栈的根元素是Action,当我们使用这种方式的时候就是说person是放在Action里的,所以可以直接使用“名字.属性”把它拿出来。
2、通过“#名字.属性”来使用,如“#request.person.username”,当我们需要取出来的例不是放在值栈的根元素里的时候,就要使用“#”来指定是哪一个对象的属性。
3、通过“%{#名字.属性}”的方式来调用,如“helloWorld.action?id=%{#person.id}”,这是当表达式与字符串一起时,处理类无法识别是否为ognl表达式时,通过“%{}”表告诉处理类这是ognl表电灯达式,当然如果处理类可以识别表达式时你加上了“%{}”也没有关系,处理类会自动忽略掉“%{}”,所以在不确定表达式是否可以被识别时,可以加上“%{}”避免错误!