Jexl 是一個 Expression Language 的解析引擎, 是為了方便嵌入你的系統或者程序框架的開發中, 他算是實現了 JSTL 中 EL 的延伸版本. 不過也采用了一些 Velocity 的概念. 下面是一個使用Jexl的例子,有詳細注釋,
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.jexl.Expression;
import org.apache.commons.jexl.ExpressionFactory;
import org.apache.commons.jexl.JexlContext;
import org.apache.commons.jexl.JexlHelper;
......
/*
* 初始化一個Cat對象
*/
Cat cat = new Cat() {
{
this.setAge(2);
this.setName("Tom");
this.setOwner(new People() {
{
this.setAge(24);
this.setName("yang");
}
});
}
};
/*
* 初始化一個List對象,列表里存入兩個元素
* 第一個元素是一個字符串
* 第二個元素是一個整數
*/
List list = new ArrayList();
list.add("Hello world !");
list.add(11);
Map map = new HashMap();
map.put("cat", cat);
map.put("people",cat.getOwner());
/*
* 初始化一個JexlContext對象,它代表一個執行JEXL表達式的上下文環境
*/
JexlContext context = JexlHelper.createContext();
/*
* 向執行JEXL表達式的上下文環境的變量字典中存入兩個變量
* 鍵值 "tom" 對應變量 cat
* 鍵值 "array" 對應變量 list
*/
context.getVars().put("tom", cat);
context.getVars().put("array", list);
context.getVars().put("map", map);
/*
* 定義要被求值的所有表達式
*/
String[] expressions = new String[]{
//嵌套屬性
"tom.owner",
//嵌套屬性
"tom.owner.name",
//嵌套屬性的方法調用,表達式求值結果為方法返回值
"tom.owner.name.length()",
"array[0].toUpperCase()",
//內置通用方法size(),返回String,Map和List的長度
"size(tom.owner.name)",
//返回列表中第一個元素
"array[0]",
//+ 操作符 可用於字符串的連接
"array[0].toUpperCase()+array[0]",
//內置通用方法empty(),如果為空返回true,否則返回false
"empty(array[0])",
"empty(array[2])",
//通過鍵值 'cat' 獲取字典中相應的值
"map['cat']",
//嵌套屬性
"map['people'].name.length()"
};
//對 expressions 中所有的表達式求值
for(String expression : expressions){
//用ExpressionFactory類的靜態方法createExpression創建一個Expression對象
Expression e = ExpressionFactory.createExpression(expression);
//對這個Expression對象求值,傳入執行JEXL表達式的上下文環境對象
Object obj = e.evaluate(context);
//輸出表達式求值結果
System.out.println(e.getExpression()+" = "+obj);
}
運行結果如下:
tom.owner = testJexl.Test_1$1$1@1ffbd68
tom.owner.name = yang
tom.owner.name.length() = 4
array[0].toUpperCase() = HELLO WORLD !
size(tom.owner.name) = 4
array[0] = Hello world !
array[0].toUpperCase()+array[0] = HELLO WORLD !Hello world !
empty(array[0]) = false
empty(array[2]) = true
map['cat'] = testJexl.Test_1$1@179c285
map['people'].name.length() = 4
---------------------
作者:Towan
來源:CSDN
原文:https://blog.csdn.net/htw2012/article/details/17715587
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
