Ognl,对象视图导航语言,${user.name}这种写法就叫对象视图导航 相比EL 比EL功能更加强大
ognl 由 root和context组成 root 对数据格式没有要求,但context必须是map
package leitao.zhang.a_ognl;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import leitao.zhang.domain.User;
import ognl.Ognl;
import ognl.OgnlContext;
import ognl.OgnlException;
public class Demo1 {
@Test
public void fun1() throws OgnlException
{
User rootUser = new User("张三", 23);
Map<String,User> ognlContext = new HashMap<String,User>();
ognlContext.put("user1",new User("李四",24));
ognlContext.put("user2",new User("王五",25));
//OGNLcontext对象
OgnlContext context = new OgnlContext();
context.setRoot(rootUser);
context.setValues(ognlContext);
//取root里的值
Object value = Ognl.getValue("name", context, rootUser);
System.out.println("value:"+value);
//取OgnlContext中的值
Object value2 = Ognl.getValue("#user1.name", context, rootUser);
System.out.println("value2:"+value2);
//修改Root中的值 ,可获取多个值 但只返回最后一个
Object value3 = Ognl.getValue("name,age", context, rootUser);
System.out.println("value3:"+value3);
Object value4 = Ognl.getValue("name='张wu',age=26,name", context, rootUser);
System.out.println("value4:"+value4);
//修改值,如果多个表达式返回最后一个修改后的值
Object value5 = Ognl.getValue("name='张wu',age=26", context, rootUser);
System.out.println("value5:"+value5);
//调用静态方法 @
Object value6 = Ognl.getValue("@leitao.zhang.a_ognl.AbcTest@echo('HAHA')", context, rootUser);
System.out.println("value6:"+value6);
//默认类是Math
Object value7 = Ognl.getValue("@@floor(10.2)", context, rootUser);
System.out.println("value7:"+value7);
//调用属性
//这个不知道为啥不可以
/*Object value7 = Ognl.getValue("@leitao.zhang.a_ognl.AbcTest@name", context, rootUser);
System.out.println("value7:"+value7);*/
Object value8 = Ognl.getValue("@@PI", context, rootUser);
System.out.println("value8:"+value8);
//创建list集合
Object value9 = Ognl.getValue("{'zhansan','lisi','wangwu','zhaoliu'}[0]", context, rootUser);
System.out.println("value9:"+value9);
Object value10 = Ognl.getValue("{'zhansan','lisi','wangwu','zhaoliu'}.get(1)", context, rootUser);
System.out.println("value10:"+value10);
//创建map集合 需要以 # 开头
Object value11 = Ognl.getValue("#{'name':'zhansan','age':23,'address':'河北'}['name']", context, rootUser);
System.out.println("value11:"+value11);
Object value12 = Ognl.getValue("#{'name':'zhansan','age':23,'address':'河北'}.get('address')", context, rootUser);
System.out.println("value12:"+value12);
//map嵌套list
Object value13 = Ognl.getValue("#{'zhansan':{'xiaoming','xiaoli'}}.get('zhansan').get(1)", context, rootUser);
System.out.println("value13:"+value13);
//list嵌套map 这种不行
/*Object value14 = Ognl.getValue("{{'name':'zhansan','age':23,'address':'河北'},{'name':'lisi','age':24,'address':'河西'}}.get(1).get('name')", context, rootUser);
System.out.println("value13:"+value14);*/
}
}
class AbcTest{
public static String name="王武是个卖烧饼的";
public static Object echo (Object o)
{
return o.toString()+"--oooo";
}
}
