http://depravedangel.javaeye.com/blog/377740
package org.darkness.ognl.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import junit.framework.TestCase;
import ognl.Ognl;
import org.darkness.oa.model.Person;
import org.darkness.oa.model.User;
public class OgnlTest extends TestCase {
// ***************** root對(duì)象的概念 ******************* //
public void testOgnl_01() throws Exception{
User user = new User();
user.setUsername("暗之幻影");
//相當(dāng)于調(diào)用user.getUsername()方法
String value = (String)Ognl.getValue("username", user);
System.out.println(value);
}
public void testOgnl_02() throws Exception{
User user = new User();
Person p = new Person();
p.setName("暗之幻影");
user.setPerson(p);
//相當(dāng)于調(diào)用user.getPerson().getName()方法
String value = (String)Ognl.getValue("person.name", user);
System.out.println(value);
}
public void testOgnl_03() throws Exception{
User user = new User();
Person p = new Person();
p.setName("暗之幻影");
user.setPerson(p);
//可以使用#root來(lái)引用根對(duì)象,相當(dāng)于調(diào)用user.getPerson().getName()方法
String value = (String)Ognl.getValue("#root.person.name", user);
System.out.println(value);
}
// *********************** context的概念 **********************//
public void testOgnl_04() throws Exception{
Person p1 = new Person();
Person p2 = new Person();
p1.setName("風(fēng)");
p2.setName("云");
Map<String,Person> context = new HashMap<String,Person>();
context.put("p1", p1);
context.put("p2", p2);
// 需要加上#才表示到context中取數(shù)據(jù),否則表示從根目錄下取值
String value = (String)Ognl.getValue("#p1.name + ',' + #p2.name", context, new Object());
System.out.println(value);
}
public void testOgnl_05() throws Exception{
Person p1 = new Person();
Person p2 = new Person();
p1.setName("風(fēng)");
p2.setName("云");
Map<String,Person> context = new HashMap<String,Person>();
context.put("p1", p1);
context.put("p2", p2);
User root = new User();
root.setUsername("雨");
String value = (String)Ognl.getValue("#p1.name + ',' + #p2.name + ',' + username", context, root);
System.out.println(value);
}
// ******************* OGNL賦值操作 ************************//
public void testOgnl_06() throws Exception{
User user = new User();
//給root對(duì)象的屬性賦值,相當(dāng)于調(diào)用user.setUsername()
Ognl.setValue("username", user, "暗之幻影");
System.out.println(user.getUsername());
}
public void testOgnl_07() throws Exception{
User user = new User();
Map<String, User> context = new HashMap<String, User>();
context.put("u", user);
//給context中的對(duì)象屬性賦值,相當(dāng)于調(diào)用user.setUsername()
Ognl.setValue("#u.username", context, new Object(), "暗之幻影");
System.out.println(user.getUsername());
}
public void testOgnl_08() throws Exception{
User user = new User();
Map<String, User> context = new HashMap<String, User>();
context.put("u", user);
//給context中的對(duì)象屬性賦值,相當(dāng)于調(diào)用user.setUsername()
//在表達(dá)式中使用=賦值操作符來(lái)賦值
Ognl.getValue("#u.username = '暗之幻影'",context, new Object());
System.out.println(user.getUsername());
}
public void testOgnl_09() throws Exception{
User user = new User();
Person p = new Person();
Map<String,Object> context = new HashMap<String,Object>();
context.put("u", user);
context.put("p", p);
//給context中的對(duì)象屬性賦值,相當(dāng)于調(diào)用user.setUsername()
//在表達(dá)式中使用=賦值操作符來(lái)賦值
Ognl.getValue("#u.username = '風(fēng)',#p.name = '云'",context, new Object());
System.out.println(user.getUsername()+","+p.getName());
}
//****************** 使用OGNL調(diào)用對(duì)象的方法 **********************//
public void testOgnl_10() throws Exception{
User user = new User();
user.setUsername("暗之幻影");
String value = (String)Ognl.getValue("getUsername()", user);
System.out.println(value);
}
public void testOgnl_11() throws Exception{
User user = new User();
Ognl.getValue("setUsername('暗之幻影')", user);
System.out.println(user.getUsername());
}
// ******************* OGNL調(diào)用類變量、靜態(tài)方法 *************************//
public void testOgnl_12() throws Exception{
User user = new User();
Ognl.getValue("setUsername('暗之幻影')", user);
Ognl.getValue("@System@out.println(username)", user);
}
public void testOgnl_13() throws Exception{
User user = new User();
Ognl.getValue("setUsername('暗之幻影')", user);
Ognl.getValue("@System@out.println(@org.darkness.struts2.test.Utils@toLowerCase(username))", user);
}
// ********************* OGNL中的this表達(dá)式 **********************//
public void testOgnl_14() throws Exception{
Object root = new Object();
Map context = new HashMap();
List values = new ArrayList();
for(int i=0; i<11; i++){
values.add(i);
}
context.put("values", values);
Ognl.getValue("@System@out.println(#values.size.(#this > 10 ? \"大于10\" : '不大于10'))", context, root);
}
public void testOgnl_15() throws Exception{
User user = new User();
Ognl.getValue("setUsername('暗之幻影')", user);
Ognl.getValue("@System@out.println(#this.username)", user);
}
public void testOgnl_16() throws Exception{
User user = new User();
Ognl.getValue("setUsername('暗之幻影')", user);
Ognl.getValue("@System@out.println(username.(#this.toLowerCase()))", user);
}
// ******************* 如何把表達(dá)式的解釋結(jié)果作為另外一個(gè)表達(dá)式,OGNL中括號(hào)的使用 **********************//
public void testOgnl_17() throws Exception{
Object root = new Object();
Map context = new HashMap();
User u = new User();
u.setUsername("暗之幻影");
context.put("u", u);
context.put("fact", "username");
/**
* 1、首先把#fact表達(dá)式進(jìn)行解釋,得到一個(gè)值:username
* 2、解釋括號(hào)中的表達(dá)式#u,其結(jié)果是user對(duì)象
* 3、把括號(hào)中表達(dá)式的結(jié)果作為root對(duì)象,解釋在第一步中得到的結(jié)果(即把第一步的結(jié)果看成另外一個(gè)表達(dá)式)
*/
String value = (String)Ognl.getValue("#fact(#u)", context, root);
System.out.println(value);
}
public void testOgnl_18() throws Exception{
Person person = new Person();
Map context = new HashMap();
User u = new User();
u.setUsername("暗之幻影");
context.put("u", u);
/**
* 相當(dāng)于調(diào)用person這個(gè)根對(duì)象的fact方法,并把#u的解釋結(jié)果作為參數(shù)傳入此方法
*/
String value = (String)Ognl.getValue("fact(#u)", context, person);
System.out.println(value); //輸出是 "暗之幻影,"
}
public void testOgnl_19() throws Exception{
Person person = new Person();
Map context = new HashMap();
User u = new User();
u.setUsername("暗之幻影");
context.put("u", u);
/**
* 1、先計(jì)算表達(dá)式fact,得到結(jié)果是:username
* 2、解釋括號(hào)中的表達(dá)式#u,其結(jié)果是user對(duì)象
* 3、把括號(hào)中表達(dá)式的結(jié)果作為root對(duì)象,解釋在第一步中得到的結(jié)果(即把第一步的結(jié)果看成另外一個(gè)表達(dá)式)
*/
String value = (String)Ognl.getValue("(fact)(#u)", context, person);
System.out.println(value); //輸出"暗之幻影"
}
// ********************* OGNL訪問(wèn)集合元素 **************************//
public void testOgnl_20() throws Exception{
Object root = new Object();
Map context = new HashMap();
//用OGNL創(chuàng)建List對(duì)象
List listvalue = (List)Ognl.getValue("{123,'暗之幻影','風(fēng)之水影'}", context, root);
context.put("listvalue", listvalue);
//用OGNL創(chuàng)建數(shù)組
int[] intarray= (int[])Ognl.getValue("new int[]{23,45,67}", context, root);
context.put("intarray", intarray);
//用OGNL創(chuàng)建Map對(duì)象
Map mapvalue = (Map)Ognl.getValue("#{'listvalue':#listvalue,'intarray':#intarray}", context, root);
context.put("mapvalue", mapvalue);
Ognl.getValue("@System@out.println(#listvalue[0])", context, root);
Ognl.getValue("@System@out.println(#intarray[1])", context, root);
Ognl.getValue("@System@out.println(#mapvalue['intarray'][2])", context, root);
Ognl.getValue("@System@out.println(#mapvalue.intarray[0])", context, root);
}
}