Struts2之ognl表达式(下)

Struts2中用ognl操作集合和映射

在上一篇文章中的Course类中重写toString方法,在TestOgnl的main方法中加入以下代码

 /*
         * 对ognl来说集合和数组是一样的
         */
        List<Course> list = new ArrayList<Course>();
        Course c2 = new Course(2,"name2");
        Course c3 = new Course(3,"name3");
        Course c4 = new Course(4,"name4");
        Course c5 = new Course(5,"name5_filtering");
        list.add(c2);
        list.add(c3);
        list.add(c4);
        list.add(c5);
        context.put("list", list);
        System.out.println(Ognl.getValue("#list", context, context.getRoot()));//由于集合中持有的是对象,故是引用
        
        System.out.println(Ognl.getValue("#list[2].name", context, context.getRoot()));
        
        /*
         * ognl操作集合"{'value1','value2','value3'}[3]"
         * ognl操作映射 "#{'key1':'value1','key2':'value2'}[key3]" 这里的#和以上的#的意思不同
         */
        Map<String,String> map = new TreeMap<String,String>();
        map.put("key1", "value1");
        map.put("key2","value2");
        context.put("map",map);
        System.out.println(Ognl.getValue("#map['key1']", context, context.getRoot()));
        
        /*
         * filtering 过滤操作集合规则 
         * 返回所有内容  : collection.{? expression}   expression ---> #this表示当先对象
         * 返回第一个数据 : collection.{^ expression}
         * 返回最后一个元素 : collection.{$ expression}
         * 
         * projection 投影集合操作规则 collection.{expression}
         * 
         * filtering 和 projecting 的区别相当于一个取得数据库中的行,一个是取得列
         * 
         */
        //use filtering
        System.out.println(Ognl.getValue("#list.{? #this.name.length() > 6}", context, context.getRoot()));
        //use projecting
        System.out.println(Ognl.getValue("#list.{#this.name}", context, context.getRoot()));
        System.out.println(Ognl.getValue("#list.{#this.id}", context, context.getRoot()));
        System.out.println(Ognl.getValue("#list.{#this.name.length() > 6 ? 'hello world' : #this.name}", context, context.getRoot()));
运行结果为:
value1
[id = 5----name = name5_filtering]
[name2, name3, name4, name5_filtering]
[2, 3, 4, 5]
[name2, name3, name4, hello world]
这两篇文章中介绍了ognl的全部使用方法。以后会在博客中给出如何在struts2中使用ognl。^_^



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值