OGNL表达式

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是最后一个值
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值