OGNL表达式
*OGNL三要素: 表达式 OgnlContext 上下文 Root 根
*OGNL作用:
[1]支持对象的操作,调用对象的方法
[2]支持静态成员访问
[3]支持赋值操作与表达串联
[4]访问OGNL上下文,访问ActionContext
[5]操作集合对象。
//针对第1点代码:
public class OgnlTest {
@Test
public void Test1() throws Exception{
//1.支持对象操作,获取上下文对象OgnlContext
OgnlContext context = new OgnlContext(); //OgnlContext()按住ctrl看,其实他就是一个map集合
//操作获取字符串长度
Object root = context.getRoot();
Object ognl = Ognl.getValue("'hello'.length()", context, root);
System.out.println(ognl);
//输出结果为5
}
//针对第2点代码:
//支持静态成员的访问
@Test
public void Test2() throws Exception{
//之前学过静态工具类math
//math工具类的随机数 double random = Math.random();
//math工具类获得pi double pi = Math.PI;
//1.获取上下文对象
OgnlContext context = new OgnlContext();
//操作
Object root = context.getRoot();
Object value1 = Ognl.getValue("@java.lang.Math@random()", context,root);
Object value2 = Ognl.getValue("@java.lang.Math@PI",context, root);
System.out.println(value1);
System.out.println(value2);
//输出结果
//0.3848238734709769
//3.141592653589793
}
//针对第4点代码:
//访问OGNL上下文,访问ActionContext
//访问OGNL上下文,访问ActionContext
@Test
public void Test3() throws Exception{
//上下文其实就是一个map,是map的话就可以往里面存储东西
//要想获取上下文里面的数据必须想要存储
//首先获取上下文对象
OgnlContext context = new OgnlContext();
//他是一个map,所以存储姓名tom
context.put("username","tom");
//执行操作
Object root = context.getRoot();
Object value = Ognl.getValue("#username",context,root);
System.out.println(value);
//如果从根中获取数据,不需要添加#号,如果不是从根中获取,需要# ★★★★★
}
//针对第5点代码:
//操作集合对象
//针对第3点代码:
//支持赋值操作与表达串联
//支持赋值操作与表达串联
@Test
public void Test5() throws Exception{
//获取上下文对象
OgnlContext context = new OgnlContext();
//操作
Object value = Ognl.getValue("#{'username':'tom','age':20}", context,context.getRoot()); //相当于创建了一个Map集合
context.setRoot(value); //把username和password 存入根中
Object root = context.getRoot(); //在从根中获取出来,把值给root
Object value2 = Ognl.getValue("username='tom',age=23",context,root); //对于串联可以写多个表达式,但是返回的结果就是最后一个表达式变量的值
System.out.println(value2); //打印结果是23,因为23是最后一个值
}