`
步行者
  • 浏览: 170176 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Commons JEXL 示例详解

    博客分类:
  • JAVA
阅读更多

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

 

5
0
分享到:
评论

相关推荐

    commons-jexl-2.0.rar

    - `examples`: 示例代码,演示了如何在实际项目中应用JEXL。 - `LICENSE`: 许可文件,规定了该软件的使用条款。 - `NOTICE`: 关于软件中包含的第三方组件的版权信息。 通过使用Apache Commons JEXL,开发者可以构建...

    apache commons jexl 表达解析工具

    apache commons jexl 表达解析工具

    commons-jexl-2.1.1

    Apache Commons JEXL,全称为Java Expression Language,是Apache软件基金会的一个开源项目,旨在提供一个简单易用的JavaScript Expression Language(JEXL)实现。这个库允许你在Java应用程序中执行动态脚本,使得...

    commons-jexl-3.1-src

    Commons Jexl是一个Java表达式语言库,由Apache软件基金会开发并维护,它在Java生态系统中扮演着重要的角色。这个"commons-jexl-3.1-src"压缩包包含了Jexl 3.1版本的源代码,对于开发者来说,这是一个宝贵的资源,...

    commons-jexl-1.1.rar源文件及jar文件

    Apache Commons Jexl是Java社区中的一个开源项目,它提供了一种强大的脚本语言引擎,用于在Java应用程序中执行JavaScript Expression Language (JEXL)表达式。这个项目的主要目标是为开发者提供一种灵活的方式来动态...

    commons-jexl-2.0.jar

    《Apache Commons JEXL:强大的脚本语言引擎》 Apache Commons JEXL,全称Java Expression Language,是Apache软件基金会下的一个开源项目,提供了一个强大的、灵活的脚本语言引擎,用于在Java应用程序中执行...

    commons-jexl-2.1.1包的源码

    《深入解析Apache Commons Jexl 2.1.1源码》 Apache Commons Jexl是Java编程语言中一个强大的脚本引擎,它允许开发者在运行时创建和执行JavaScript-like的表达式。Jexl 2.1.1版本是其历史上的一个重要里程碑,为...

    excel模板所需jar:commons-jexl-2.1.1.jar 和 jxls-core1.0.3.jar

    `commons-jexl-2.1.1.jar`是Apache Commons JEXL(Java Expression Language)的库,它提供了一种表达式语言,用于在Java应用程序中执行动态脚本。在`jxls`中,JEXL被用来解析和执行Excel模板中的表达式,这些表达式...

    commons-fileupload详解

    ### commons-fileupload详解 #### 一、概述 `commons-fileupload`是Apache Commons项目下的一个子项目,主要用于处理HTTP请求中的文件上传。该组件提供了一种简单高效的方式来处理客户端发送的`multipart/form-...

    commons-jexl-1.1.jar

    commons-jexl-1.1.jar

    apache-commons源代码2,包括doc,src,jar

    包括源代码1剩余的,包括:commons-jexl-2.1.1-bin.zip commons-jxpath-1.3-bin.zip commons-lang3-3.1-bin.zip commons-launcher-1.1.zip commons-logging-1.1.1-bin.zip commons-math3-3.1-bin.zip commons-...

    mapping-impl-jexl:零依赖映射库-Apache Commons JEXL实现

    Apache Commons JEXL实现模块 •• 特征 通过委派给来实现 (v1.0.0) 零依赖关系,为方便起见,Apache Commons JEXL以阴影显示 沙盒脚本执行环境 安装 添加API模块 将JCenter作为存储库添加到您的Maven POM: ...

    commons-jexl-2.0.1-sources.jar

    Jexl 是一个 Expression Language 的解析引擎, 是为了方便嵌入你的系统或者程序框架的开发中, 他算是实现了 JSTL 中 EL 的延伸版本. 不过也采用了一些 Velocity 的概念.

    commons-jexl-1.0-src.tar.gz

    commons-jexl-1.0-src.tar.gz

    jexl3的jar包

    **JexlEngine类详解** `JexlEngine`是Jexl的核心类,用于解析和执行Jexl表达式。通过实例化`JexlEngine`,我们可以创建一个引擎来处理表达式,并将其转换为可执行的对象。以下是一些关键的`JexlEngine`方法: 1. `...

    java解析表达式JEXL实现办法

    JEXL(Java Expression Language)是Apache Commons项目提供的一种轻量级的表达式语言,它允许我们在Java应用程序中方便地执行JavaScript风格的表达式。本文将深入探讨如何使用JEXL在Java中解析和执行表达式。 首先...

    Apache-commons组件详解

    关于Commons组件的详解,内容很详实,讲解了常用的一些API

Global site tag (gtag.js) - Google Analytics