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

版权声明:本文为博主原创文章,转载请附上博文链接!

java jexl_一种表达式语言的解析引擎JEXL简单使用相关推荐

  1. 昨晚看《天才知道》3进2的一个java基础题目有感:java是一种跨平台语言,它组成的2个部分是什么

    昨晚无意中看天才知道发现了这么个题目大概是这样: java是一种跨平台语言,它组成的2个部分是什么? 思考了一下,又看一次基础: java语言是一种基于"面向对象"思想的程序设计语 ...

  2. Java是一种什么语言

    作者:王奎       我的博客:www.marksaas.com Java是一种计算机编程语言,拥有跨平台.面向对象.泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发. Java编程语言 ...

  3. Java是一种强类型语言

    强类型:在使用变量的时候,需要显示的定义变量的数据类型   java 弱类型:在使用变量的时候,不需要定义变量的数据类型,程序会根据值自己判断数据类型  js,python,scala 数据类型: 基 ...

  4. 在JSP2.0中使用EL表达式语言

    EL(表达式语言)是一种数据访问语言,可以方便地访问和处理应用程序数据,而无需使用scriptlet或者请求时(request-time)表达式的值.(不需要使用< % 和%>来获得数据, ...

  5. JAVA中几种常用JSON库性能比较

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 作者:飞污熊 xncoding.com/2018/01/09/java/jsons.html 本 ...

  6. Spring3的表达式语言

    Spring表达式语言全称为"Spring Expression Language",缩写为"SpEL",类似于Struts2x中使用的OGNL表达式语言, 能 ...

  7. java中8种基本类型与运算符

    java是一种强类型语言,类型一旦出错就编译不过去,在这里java一共有 1)整形:int(4字节)short(2字节)long(8字节) 2)浮点型:float(4字节)double(8字节) 3) ...

  8. Spring表达式语言使用

    Spring表达式语言使用 @(Spring)[spEL, Spring, 表达式语言] Spring表达式语言使用 基本概述 spEL的功能概述 spEL语法以XML为例 字面值表达式 字符串 整型 ...

  9. 开涛spring3(5.15.2) - Spring表达式语言 之 5.1 概述 5.2 SpEL基础

    5.1  概述 5.1.1  概述 Spring表达式语言全称为"Spring Expression Language",缩写为"SpEL",类似于Struts ...

最新文章

  1. [微信小程序]滚动选择器
  2. 数据分析索引总结(下)Pandas索引技巧
  3. Gaussian Filter
  4. c语言编译器bug,关于c语言的一个小bug详解
  5. 快递物流查询接口介绍
  6. JavaScript专题之从零实现jQuery的extend
  7. “面试不败计划”:集合知识整体总结
  8. 济南长清区谋定特色展销中心 对话中国农民丰收节交易会
  9. 黑马程序员--网络编程
  10. 【测试能力提升】Jira 和禅道数据库分析,方便你写周报、写总结、出报告
  11. 逻辑分析题目:“给你一个9升的水桶和一个4升的水桶,在河里取6升水”
  12. 轻松访问Google Chrome浏览器中的浏览历史记录
  13. ABP-Hangfire定时任务
  14. 程序实例python_Python花式编程案例集锦(5)
  15. 我脸上被软件开发刻了几个字
  16. 国内云计算的下半场机遇在哪里?
  17. 联合循环——07(集控楼系统)
  18. 软件设计师-5.软件工程基础知识
  19. 我的2012--研究生的毕业季
  20. DeepAR多重多元多步时间序列预测

热门文章

  1. 更新cocoapods相关问题
  2. git commit --amend用法(摘抄)
  3. 基于JAVA的IKAnalyzer中文分词运用
  4. [刘阳Java]_CSS数字分页效果
  5. Java获取Object属性值
  6. MVC中某个页面不需要引用母版页的正确写法
  7. [WP8] ListBox的Item宽度自动填满
  8. 离散卷积与自相关----------信号处理系列[原创]
  9. upupoo设置HTML壁纸,win10 upupoo黑屏怎么解决-解决upupoo设置壁纸黑屏的方法 - 河东软件园...
  10. Python框架篇之Django(Django项目搭建全过程、Web框架与Django)