Struts2深入学习----OGNL表达式原理

发布时间:2017-09-04 12:09:31
Struts2深入学习----OGNL表达式原理

目录

一、OGNL表达式基础知识

  1. 示例:第一个OGNL程序

  2. 示例:上下文环境中使用OGNL

  3. 示例:使用OGNL调用方法

  4. 示例:使用OGNL操作集合

  5. 示例:使用OGNL过滤集合与投影集合

二、OGNL与Struts2


OGNL表达式

  OGNL,全称为Object-Graph Navigation Language,它是一个功能强大的表达式语言,用来获取和设置Java对象的属性,它旨在提供一个更高的更抽象的层次来对Java对象图进行导航。

  OGNL表达式的基本单位是"导航链",一般导航链由如下几个部分组成:

  1. 属性名称(property)

  2. 方法调用(method invoke)

  3. 数组元素

  所有的OGNL表达式都基于当前对象的上下文来完成求值运算,链的前面部分的结果将作为后面求值的上下文。例如:names[0].length()。

示例:第一个OGNL程序

public class OGNL1
{
public static void main(String[] args)
{
/* 创建一个Person对象 */
Person person = new Person();
person.setName("zhangsan");

try
{
/* 从person对象中获取name属性的值 */
Object value = Ognl.getValue("name", person);

System.out.println(value);
}
catch (OgnlException e)
{
e.printStackTrace();
}
}
}

class Person
{
private String name;

public String getName()
{
return name;
}

public void setName(String name)
{
this.name = name;
}
}复制代码
控制台输出:

zhangsan可以看到我们正确的取得了person对象的name属性值,该getValue声明如下:

public static <T> T getValue(String expression,Object root)throws OgnlException

Convenience method that combines calls to parseExpression and getValue.

Parameters:
expression - the OGNL expression to be parsed
root - the root object for the OGNL expression
Returns:
the result of evaluating the expression复制代码
OGNL会根据表达式从根对象(root)中提取值。

示例:上下文环境中使用OGNL

public class OGNL1
{
public static void main(String[] args)
{
/* 创建一个上下文Context对象,专题,站群系统,它是用保存多个对象一个环境 对象 */
Map<String , Object> context = new HashMap<String , Object>();

Person person1 = new Person();
person1.setName("zhangsan");

Person person2 = new Person();
person2.setName("lisi");

Person person3 = new Person();
person3.setName("wangwu");

/* person4不放入到上下文环境中 */
Person person4 = new Person();
person4.setName("zhaoliu");

/* 将person1、person2、person3添加到环境中(上下文中) */
context.put("person1", person1);
context.put("person2", person2);
context.put("person3", person3);

try
{
/* 获取根对象的"name"属性值 */
Object value = Ognl.getValue("name", context, person2);
System.out.println("ognl expression \"name\" evaluation is : " + value);

/* 获取根对象的"name"属性值 */
Object value2 = Ognl.getValue("#person2.name", context, person2);
System.out.println("ognl expression \"#person2.name\" evaluation is : " + value2);

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉网站设计 http://www.feimao666.com