OGNL表达式

1,什么是OGNL:

  OGNL的全称是对象图导航语言,它是一种功能强大的开源表达式语言,使用这种表达式语言

  可以通过某种表达式语法,存取Java对象的属性,调用Java对象的方法,同时能自动实现必要的类型转换

2,特点:

  支持对象方法调用

  支持类静态方法调用和值访问

  支持赋值操作和表达式串联

  操作集合对象

  访问OGNL上下文

3,要点:

  表达式

  根对象

  Context 对象

    设置了根对象,OGNL可以对根对象进行取值或写值,根对象所在的环境就是OGNL上下文环境

    上下文Context是个Map类型的对象,在表达式种访问Context对象,需要使用“#”加上对象名称,即“#对象名称”的形式

实例代码:

  创建3个类

  

  

  

   测试类:

    

public class strutsTest {
    @Test
    public void test1() throws OgnlException {
        Branch branch=new Branch();
        branch.setBranchId("张三");
        Group group=new Group();
        group.setBranch(branch);
        User user=new User();
        user.setGroup(group);
        user.setUsername("李四");
        Map map=new HashMap();
        map.put("u", user);
        // 用java导航访问
        System.out.println("branchId:"+user.getGroup().getBranch().getBranchId());
        /*
         * 使用OGNL访问getValue(参数1,参数2) 参数1:参数1是表达式 表达式是整个OGNL的核心
         * OGNL会根据表达式去对象中取值  所有的OGNL操作都是针对表达式解析后进行的  
         * 参数2:根对象User包括Group包括Branch
         * 
         */
        System.out.println("branchId:"+Ognl.getValue("group.branch.branchId", user));
        System.out.println("username:"+Ognl.getValue("#u.username",map,user));
    }
    @Test
    public void test2() throws OgnlException
    {
        User user = new User();
        
        Group group = new Group();
        group.setName("王五");
        
        user.setGroup(group);
        System.out.println("groupName:"+Ognl.getValue("getGroup().getName()", user));
    };

}
原文地址:https://www.cnblogs.com/yz-bky/p/12626574.html