1 package test; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 6 import org.junit.Test; 7 8 import ognl.Ognl; 9 import ognl.OgnlException; 10 import tcx.model.Department; 11 import tcx.model.Role; 12 import tcx.model.User; 13 14 public class testOgnl { 15 16 @Test 17 public void test() { 18 try { 19 User u = new User("1", "naruto", "鸣人"); 20 Department dep = new Department("火之国"); 21 u.setDep(dep); 22 User u2 = new User("2", "sasuke", "佐助", dep); 23 User u3 = new User("3", "Itachi", "鼬", dep); 24 25 System.out.println(Ognl.getValue("id", u)); 26 System.out.println(Ognl.getValue("username", u)); 27 System.out.println(Ognl.getValue("nickname", u)); 28 System.out.println(Ognl.getValue("dep.name", u)); 29 System.out.println(">>>>>>------------------------------>>>>>>>>>"); 30 31 ArrayList<User> users = new ArrayList<>(); 32 users.add(u); 33 users.add(u2); 34 users.add(u3); 35 for (User k : users) { 36 System.out.println(k.getId()); 37 System.out.println(k.getUsername()); 38 System.out.println(k.getNickname()); 39 System.out.println(k.getDep().getName()); 40 System.out.println("------------------------------>>>>>>>>>"); 41 } 42 } catch (OgnlException e) { 43 e.printStackTrace(); 44 } 45 } 46 47 @Test 48 public void test1() { 49 try { 50 User u = new User("1", "naruto", "鸣人"); 51 Department dep = new Department("火之国"); 52 u.setDep(dep); 53 User u2 = new User("2", "sasuke", "佐助", dep); 54 User u3 = new User("3", "Itachi", "鼬", dep); 55 Role role = new Role("1", "wukong", "孙悟空"); 56 HashMap<String, Object> context = new HashMap<String, Object>(); 57 context.put("u", u); 58 context.put("u2", u2); 59 context.put("u3", u3); 60 context.put("role", role); 61 // 以下表达式是在root中找,u是root。 62 System.out.println(Ognl.getValue("id", context, u)); 63 System.out.println(Ognl.getValue("username", context, u)); 64 System.out.println(Ognl.getValue("nickname", context, u)); 65 System.out.println(Ognl.getValue("dep.name", context, u)); 66 // 以下表达式是在context这个map中查找,和root无关,root是u。 67 System.out.println(Ognl.getValue("#role.username", context, u)); 68 // root为context不加#可以取到值。 69 System.out.println(Ognl.getValue("role.username", context, context)); 70 // Ognl是一个大的Context,根的key是root,所以可以通过#root.xx取值 71 System.out.println(Ognl.getValue("#root.username", context, role)); 72 73 } catch (Exception e) { 74 e.printStackTrace(); 75 } 76 } 77 78 @Test 79 public void test2() { 80 try { 81 User u = new User("1", "naruto", "鸣人"); 82 Department dep = new Department("火之国"); 83 u.setDep(dep); 84 User u2 = new User("2", "sasuke", "佐助", dep); 85 User u3 = new User("3", "Itachi", "鼬", dep); 86 ArrayList<User> users = new ArrayList<>(); 87 88 users.add(u); 89 users.add(u2); 90 users.add(u3); 91 // 取list中的元素,通过#root[index].xx。 92 System.out.println(Ognl.getValue("#root[0].id", users)); 93 System.out.println(Ognl.getValue("#root[0].username", users)); 94 System.out.println(Ognl.getValue("#root[0].dep.name", users)); 95 System.out.println(Ognl.getValue("#root[1].id", users)); 96 System.out.println(Ognl.getValue("#root[1].username", users)); 97 System.out.println(Ognl.getValue("#root[1].dep.name", users)); 98 System.out.println(Ognl.getValue("#root[2].id", users)); 99 System.out.println(Ognl.getValue("#root[2].username", users)); 100 System.out.println(Ognl.getValue("#root[2].dep.name", users)); 101 102 } catch (Exception e) { 103 e.printStackTrace(); 104 } 105 } 106 107 @Test 108 public void test3() { 109 try { 110 User u = new User("1", "naruto", "鸣人"); 111 Department dep = new Department("火之国"); 112 u.setDep(dep); 113 User u2 = new User("2", "sasuke", "佐助", dep); 114 User u3 = new User("3", "Itachi", "鼬", dep); 115 ArrayList<User> users = new ArrayList<>(); 116 117 users.add(u); 118 users.add(u2); 119 users.add(u3); 120 // ognl完成方法的调用。 121 System.out.println(Ognl.getValue("#root[0].sum(1,100)", users)); 122 System.out.println(Ognl.getValue("#root[1].hello(123)", users)); 123 System.out.println(Ognl.getValue("hello('困')", u)); 124 // 可以通过调用list中的get()方法获取某个下标的对象,然后完成导航。 125 System.out.println(Ognl.getValue("get(0).username", users)); 126 } catch (OgnlException e) { 127 e.printStackTrace(); 128 } 129 } 130 131 }
用到的类User,Role,Department
1 package tcx.model; 2 3 public class User { 4 private String id; 5 private String username; 6 private String nickname; 7 private Department dep; 8 public String getId() { 9 return id; 10 } 11 public void setId(String id) { 12 this.id = id; 13 } 14 public String getUsername() { 15 return username; 16 } 17 public void setUsername(String username) { 18 this.username = username; 19 } 20 public String getNickname() { 21 return nickname; 22 } 23 public void setNickname(String nickname) { 24 this.nickname = nickname; 25 } 26 public Department getDep() { 27 return dep; 28 } 29 public void setDep(Department dep) { 30 this.dep = dep; 31 } 32 public User(String id, String username, String nickname) { 33 super(); 34 this.id = id; 35 this.username = username; 36 this.nickname = nickname; 37 } 38 39 public User(String id, String username, String nickname, Department dep) { 40 super(); 41 this.id = id; 42 this.username = username; 43 this.nickname = nickname; 44 this.dep = dep; 45 } 46 @Override 47 public String toString() { 48 return "User [id=" + id + ", username=" + username + ", nickname=" + nickname + "]"; 49 } 50 public int sum(int a,int b) { 51 return a+b; 52 } 53 public String hello(String h) { 54 return h+"中国dota乙烷"; 55 } 56 57 }
1 package tcx.model; 2 3 public class Department { 4 private String name; 5 6 public String getName() { 7 return name; 8 } 9 10 public void setName(String name) { 11 this.name = name; 12 } 13 14 public Department(String name) { 15 super(); 16 this.name = name; 17 } 18 19 20 }
1 package tcx.model; 2 3 public class Role { 4 private String id; 5 private String username; 6 private String nickname; 7 8 public String getId() { 9 return id; 10 } 11 12 public void setId(String id) { 13 this.id = id; 14 } 15 16 public String getUsername() { 17 return username; 18 } 19 20 public void setUsername(String username) { 21 this.username = username; 22 } 23 24 public String getNickname() { 25 return nickname; 26 } 27 28 public void setNickname(String nickname) { 29 this.nickname = nickname; 30 } 31 32 public Role(String id, String username, String nickname) { 33 super(); 34 this.id = id; 35 this.username = username; 36 this.nickname = nickname; 37 } 38 39 }
从根下取值不需要加#号
从context下取值需要加#号
根的结构
u
--id
--username
--nickname
--dep
--name
context结构
context
--u
--u1
--u2
--u3