OGNL表达式语言的真正目的,是为了在那些不能写JAVA代码的地方执行JAVA代码,或者是为了更方便地执行JAVA代码:
1.Root对象:
利用OGNL进行导航的代码如下:
//利用OGNL表达式访问
String value = (String)Ognl.getValue("group.org.orgId", user);
Ognl.getValue()方法的第一个参数,就是一条OGNL表达式,第二个参数是指定在表达式中需要用到的root对象!
完整代码如下:
public void testOgnl01() throws Exception{
User user = new User();
user.setUsername("张三");
//利用OGNL表达式访问user对象的username属性
String value = (String)Ognl.getValue("username", user);
log(value);
}
public void testOgnl02() throws Exception{
User user = new User();
Group g = new Group();
Organization o = new Organization();
o.setOrgId("ORGID");
g.setOrg(o);
user.setGroup(g);
//用JAVA来导航访问
log(user.getGroup().getOrg().getOrgId());
//利用OGNL表达式访问
String value = (String)Ognl.getValue("group.org.orgId", user);
log(value);
}
public void testOgnl03() throws Exception{
User user = new User();
Group g = new Group();
Organization o = new Organization();
o.setOrgId("ORGID");
g.setOrg(o);
user.setGroup(g);
//用JAVA来导航访问
log(user.getGroup().getOrg().getOrgId());
//也可以在表达式中使用#root来代表root对象
String value = (String)Ognl.getValue("#root.group.org.orgId", user);
log(value);
}
private void log(Object o){
System.out.println(o);
}
2. Context对象:
在OGNL的表达式中,有可能需要访问到多个毫不相干的对象,这时候,我们需要给OGNL传递一个Map类型的对象,把表达式中需要用到的对象放到Map中即可!这个Map对象,称为context。
要在表达式中访问到context中的对象,需要使用“#对象名称”的语法规则。
http://blog.csdn.net/li_tengfei/archive/2010/12/25/6098134.aspx