关闭

Struts2之ognl表达式(下)

457人阅读 评论(0) 收藏 举报

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。^_^



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:20719次
    • 积分:357
    • 等级:
    • 排名:千里之外
    • 原创:15篇
    • 转载:5篇
    • 译文:0篇
    • 评论:3条
    最新评论