ONGL介绍
1.简介
?
OGNL:Object Graph Navigation Language,是一种功能强大的表达式语言,可以存取对象的属性,调用对象的方法等。
?
著名的Struts2使用它来实现UI和Action之间的数据绑定。
?
2.两个重要的API
?
Ognl.getValue(String expression, Object root);
从root对象中获取expression对应的值
?
Ognl.getValue(String expression, Map<String, Object> context, Object root);
从根对象为root的上下文context中获取expression对应的值
?
我们可以从下面一段代码中看出context和root的区别
?
????????? 可以同构在#之后用"@"包围的类全名来指定
?
?? #{"name" : "007", "age" : 45}
?? #@java.util.LinkedHashMap@{"name" : "007", "age" : 45}
?
// in & not inassertTrue((Boolean) Ognl.getValue("'badminton' in {'badminton', 'CS'}", null));assertTrue((Boolean) Ognl.getValue("4 not in new int[]{1, 2, 3}", null));User user = new User();user.setId("000");User user1 = new User();user1.setId("001");User user2 = new User();user2.setId("002");List<User> users = new ArrayList<User>();users.add(user);users.add(user1);users.add(user2);// projectionList<String> ids = (List<String>) Ognl.getValue("#root.{id}", users);assertEquals("000", ids.get(0));assertEquals("001", ids.get(1));assertEquals("002", ids.get(2));// selectionList<User> filteredUsers = (List<User>) Ognl.getValue("#root.{? #this.id instanceof String}", users);assertEquals(user, Ognl.getValue("#root[0]", filteredUsers));// first matchList<User> filteredUsers1 = (List<User>) Ognl.getValue("#root.{^ #this.id instanceof String}", users);assertEquals(user, Ognl.getValue("#root[0]", filteredUsers1));List<User> filteredUsers2 = (List<User>) Ognl.getValue("#root.{$ #this.id instanceof String}", users);assertEquals(user2, Ognl.getValue("#root[0]", filteredUsers2));?
4.参考资料
?
http://commons.apache.org/ognl/