学习OGNL表达式

首先OGNL是什么

    OGNL:Object-Graph Navigation Language 的缩写他是对象视图导航语言 (${user.addr.name}这种写法就叫对象视图导航)

他能做什么

    OGNL:不仅仅可以视图导航,他还支持比EL表达式更加丰富的功能 

怎么用它

  1、先导包因为我是学到struts2才学的ognl的并且struts2的包中已经包含了 

  2、代码准备       

  //准备OGNLContext
//准备Root
User rootUser = new User("tom",81);
//准备Context
Map<String,User> context = new HashMap<String,User>();
context.put("user1", new User("jack", 12));
context.put("user1", new User("roce",21));
OgnlContext oc = new OgnlContext();
oc.setRoot(rootUser);
oc.setValues(context);

//书写OGNL

  准备好了以后开始看他的语法

           1、基本取值         

//取出root中user对象的name属性
String name =(String) Ognl.getValue("name",oc,oc.getRoot());
Integer age =(Integer) Ognl.getValue("age",oc,oc.getRoot());
System.out.println(age);

System.out.println(name);

//取出context中user对象的name属性
String name =(String) Ognl.getValue("#user1.name",oc,oc.getRoot());
Integer age =(Integer) Ognl.getValue("#user1.age",oc,oc.getRoot());
System.out.println(age);
System.out.println(name);

           2、赋值

//取出root中user对象的name属性并赋值
String name = (String) Ognl.getValue("name='32', name ",oc,oc.getRoot());
System.out.println(name);
//取出context中的user对象name并赋值
String name1 =(String) Ognl.getValue("#user1.name='步惊云',#user1.name", oc,oc.getRoot());
System.out.println(name1);

           3、调用方法

 

 //调用root中user对象的方法
String name = (String) Ognl.getValue("setName('嗯哼'),getName()",oc,oc.getRoot());
System.out.println(name);
//调用context中的user对象的方法
String name1 =(String) Ognl.getValue("#user1.setName('步惊云'),#user1.getName()",                                  oc,oc.getRoot());
System.out.println(name1);

           4、调用静态方法(这里我写了一个工具类HahaUtils)             

  工具类HahaUtils

                       public class HahaUtils {
                       public static Object ec(Object o){
                 return o;
                          }
                       }
 

               

   //调用root中user对象的方法
            String name = (String) Ognl.getValue("@cn.gongsiming.a_ognl.HahaUtils@ec('hello 老                                贾')",oc,oc.getRoot());
            System.out.println(name);
           //调用context中的user对象的方法
           Double name1 =(Double) Ognl.getValue("@@PI", oc,oc.getRoot());
           System.out.println(name1);

           5、创建对象(List,Map)             

  //ognl创建list对象
Integer size = (Integer) Ognl.getValue("{'jack','tom','tom','cat'}.size()",oc,oc.getRoot());
System.out.println(size);
String name1 =(String) Ognl.getValue("{'jack','tom','tom','cat'}[0]", oc,oc.getRoot());
String name2 =(String) Ognl.getValue("{'jack','tom','tom','cat'}.get(1)", oc,oc.getRoot());
System.out.println(name1);
System.out.println(name2);
//ognl创建map对象
Integer size2 = (Integer) Ognl.getValue("#{'name':'老贾','age':'21'}.size()",oc , oc.getRoot());
       String  name3 = (String) Ognl.getValue("#{'name':'老贾','age':'21'}['name']", oc,oc.getRoot());
       String  name4 = (String) Ognl.getValue("#{'name':'老贾','age':'21'}.get('age')", oc,oc.getRoot());
       System.out.println(size2);
       System.out.println(name3);

      System.out.println(name4);

这里我只简单介绍ognl的概念 和语法 ,并没有说到和struts2的联系,因为ognl应该是一个单独的知识点并不是基于struts2的

所以就分开来说了  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值