`
dinguangx
  • 浏览: 245632 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JEXL实现模板引擎的功能

    博客分类:
  • J2SE
阅读更多

JEXL是一个表达式语言的解析引擎,用来解析表达式,被用来做一个条件判断,数据有效性校验,工作流等场合,一个示例如下:

private static HashMap<String, Object> contextMap = new HashMap<String, Object>();

	@Before
	public void init() {
		contextMap.put("str", "字符串");
		contextMap.put("index", 12);
		contextMap.put("map", new HashMap<String, Object>() {
			{
				this.put("key1", "value1");
			}
		});
	}

 

首先有一些基础数据:通过这些基础数据计算一些表达式的示例如下:

@Test
	public void testJexl() throws Exception {

		String[] expressions = new String[] { "12+3", "str", "index",
				"index+5", "map.key1" };
		JexlContext jexlContext = JexlHelper.createContext();
		jexlContext.setVars(contextMap);
		for (String expression : expressions) {
			Expression expr = ExpressionFactory.createExpression(expression);
			Object obj = expr.evaluate(jexlContext);
			System.out.println(expression + "  =>  " + obj);
		}
	}

 

该程序的运行结果为:

12+3  =>  15
str  =>  字符串
index  =>  12
index+5  =>  17
map.key1  =>  value1

 

    但是在一些稍微复杂的场合,除了表达式本身,还有一些其他的数据,或者无法区分一个字符串是否为表达式的情况,比如制作的数据导出模板,有一些单元格是需要通过表达式取值的,而另外一些单元格就是纯粹的文本,这就没有直接通过表达式引擎对这些格子计算值了,在这样的场景下,其实是应该应用freemarker之类的模板引擎来计算格子的值的,但是由于会用到一些复杂的运算,如三元表达式等,freemarker显得有点不能胜任,所以还是考虑用jexl实现模板引擎的功能,仍然以上面的基础数据为例,期望以下的表达式输出结果:

1+2=${1+2}  =>  1+2=3
str is ${str}  =>  str is 字符串
index is ${index}  =>  index is 12
index+5 is ${index+5}  =>  index+5 is 17
map.key1 is ${map.key1}  =>  map.key1 is value1
inner expression ${index+${index+${index}} + ${index}}  =>  inner expression 48

 

    即,通过解析字符串中是否包含EL表达式${},如果包含就调用JEXL引擎去解析该表达式,从而实现一个利用JEXL解析的模板引擎,从期望的结果可以看出,该模板引擎支持简单的表达式解析和嵌套表达式解析功能。

   整个测试类代码及解析类代码见附件.

0
1
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    jexl3的jar包

    Jexl3常用于配置文件解析、动态SQL生成、模板引擎和自动化测试等多个领域。例如,你可以在配置文件中使用Jexl表达式来定义复杂的条件,或者在服务器端根据用户输入动态生成SQL查询。 **性能和优化** Jexl3通过优化...

    commons-jexl-2.1.1包的源码

    - 模板引擎:在Web开发中,用Jexl编写模板,生成HTML或其他格式的输出。 - 数据过滤和转换:在数据处理中,使用Jexl进行条件判断和数据转换。 通过对Apache Commons Jexl 2.1.1源码的深入研究,开发者可以更好地...

    commons-jexl-2.0.jar

    2. **模板引擎**:在生成动态内容如电子邮件、报告或网页时,JEXL可以作为模板语言来填充变量和执行逻辑。 3. **规则引擎**:通过JEXL,开发者可以轻松实现基于规则的决策系统,例如业务流程中的审批规则。 4. **...

    jexl的jar包以及应用举例

    - **模板引擎**:在生成HTML或其他格式的输出时,Jexl可以作为模板语言,动态插入变量或表达式的结果。 - **配置文件解析**:配置文件中包含动态内容时,可以用Jexl解析并执行这些表达式。 - **控制流**:在某些...

    jxls导excel所需的所有jar包

    JXLS是一个开源项目,它的主要功能是将Java对象和XML模板关联起来,通过简单的XML指令,实现对Excel表格内容的动态操作。这极大地简化了处理Excel的工作,特别是在需要大量数据处理和格式化的情况下。 要使用JXLS,...

    Python库 | pyjexl-0.1.2-py2.py3-none-any.whl

    - **模板引擎**:可以结合模板引擎,用JEXL表达式动态生成内容。 - **脚本编写**:在自动化脚本或临时任务中,`pyjexl`能快速实现动态计算。 总的来说,`pyjexl`为Python开发者提供了一种强大的工具,可以方便地在...

    jxls包以及依赖包(部分)

    Apache POI处理Excel文件,Commons Collections提供集合操作,JEXL实现动态表达式,而SLF4J则负责日志记录。jxls-core和jxls-reader是jxls的核心组件,实现了从Java数据到Excel的转换和反向转换。这个压缩包为个人...

    jsr223 enjines

    OGNL用于获取和设置Java对象的属性,其强大的表达式能力在数据绑定和模板引擎中非常有用。 4. **JEXL (Java Expression Language)**:JEXL是Apache Commons项目的一部分,它提供了类似JavaScript的表达式语言,可以...

    jxls生成并导出excel所需jar包

    JEXL(Java Expression Language)是Apache Commons项目的一部分,它提供了一个强大的JavaScript-like表达式语言引擎,可以用来在Java程序中执行动态脚本。`jxls`依赖于`commons-jexl`来解析和执行模板中的JEXL...

    java 制作excel报表的工具

    值得注意的是,jxls还支持复杂的Excel功能,如条件格式化、合并单元格、图表生成等,这些都是通过其强大的模板引擎实现的。此外,jxls-0.9.6.zip中可能包含jxls库的源码和示例,可以帮助开发者更好地理解和使用这个...

    jxls1.0.1最新版及所有依赖jar包

    commons-jexl-2.1.1.jar 提供了Java Expression Language (JEXL)引擎,它是jxls的关键组成部分。JEXL允许在Excel模板中执行动态表达式,这些表达式可以访问和操作Java对象的属性,进行逻辑判断,甚至执行复杂的计算...

    jxls官方demo

    1. **模板引擎**:jxls支持使用JEXL(Java Expression Language)在Excel模板中编写表达式,可以处理复杂的逻辑和数据转换。 2. **批注处理**:可以在模板中添加批注,方便在生成的Excel文件中保留必要的说明。 3. *...

    JXLS 2.0.0

    1. **模板引擎**:JXLS基于Apache POI库,允许开发者使用Excel作为模板来定义报表结构。开发者可以创建一个包含静态内容和占位符的Excel文件,然后使用JXLS将数据填充到这些占位符中。 2. **表达式支持**:在模板中...

    iReportTeam.pdf

    标签“源码”提示我们关注iReport的内部实现,例如它的模板引擎是如何解析XML报表定义文件(JRXML)并生成最终报表的。源码分析可以揭示如何扩展内置功能,比如自定义函数或数据处理器。 另一方面,标签“工具”...

    IReport & JasperReport

    IReport是JasperReport的配套设计工具,用户用IReport创建报表模板(.jrxml),然后由JasperReport引擎将这些模板转换成实际的报表。这种分工协作模式使得开发过程更加高效,设计和生成报表的过程得以分离。 **应用...

    ireport&jsperreport学习资料

    3. **事件和脚本**:了解如何在报表中使用事件和自定义脚本来实现特定功能,如数据处理、样式调整等。 4. **国际化和样式表**:掌握如何实现报表的多语言支持以及使用CSS样式的自定义报表样式。 5. **分组和排序**...

    jasperreports-6.3.0-project.zip

    - **表达式语言(JEXL)**:JasperReports使用内置的JEXL表达式引擎来处理计算和逻辑操作。 - **脚本let**:用户可以编写自定义的Java脚本let来扩展报表功能。 5. **报表输出格式** - **PDF**:专业且可打印的格式...

    iReport 4.7.1

    iReport是一款强大的报表设计工具,特别适用于开发和...无论是简单的数据展示还是复杂的分析报告,都能通过其直观的界面和强大的功能得以实现。如果你需要处理.jasper文件,iReport 4.7.1无疑是一个值得信赖的选择。

    iReport+jasperReports报表设计中文全套.rar

    3. **表达式和变量**:学习使用表达式语言(JEXL或EL)来计算和处理数据,以及定义和使用报表内部的变量,以实现动态计算和数据转换。 4. **子报表与分组**:理解如何在主报表中嵌入子报表,以及如何使用分组功能对...

    java源码:JasperReports 报表类库v3.5.rar

    通过子报表和.jasper文件的引用,可以实现模板的复用,提高开发效率。 10. **事件处理** JasperReports允许注册事件监听器,以在特定时刻(如数据填充前、后)执行自定义逻辑。 11. **API文档** 虽然这个压缩包...

Global site tag (gtag.js) - Google Analytics