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