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));
};
}