Commons JEXL 示例详解
来源:互联网 发布:硕士论文修改软件 编辑:程序博客网 时间:2024/06/06 01:17
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
http://yangjunfeng.iteye.com/blog/399602
0 0
- Commons JEXL 示例详解
- 试用commons-jexl
- Apache Commons JEXL
- JEXL
- --java--jexl
- commons.configuration 读取示例
- Apache Commons IO 示例
- Apache Commons Text示例
- commons-fileupload 图片上传示例
- Commons CLI使用详解
- commons-uploadfiles详解
- Commons CLI使用详解
- commons-beanutils.jar详解
- jexl解析表达式字符串
- jexl表达式应用
- Jexl解析表达式
- jexl解析字符串表达式
- Java Expression Language (JEXL)
- httpclient post 中文问题
- C++学习的一些经历
- JMeter
- 简约之美Jodd-http--深入源码理解http协议
- JActor
- Commons JEXL 示例详解
- Hbase课程01- 和Anmy学习大数据
- scala与java之间的那些事
- DataGridView详解
- HDU-ACM2015偶数求和
- 用Apache HttpClient实现URL重定向
- 较难推导题(数学+矩阵快速幂)(13长沙邀请赛)(4565)
- 比印集市的工匠精神
- 各种编码格式的区别与联系