Java: How to evaluate an EL expression - standalone (outside any web framework) without implementing interfaces?(Java:如何在不实现接口的情况下独立(在任何Web框架之外)计算EL表达式?)
问题描述
我想在应用程序中使用EL。但我找不到任何方法。我通常最终需要一些我没有实现的接口。
我有一个对象映射,我希望类似Hello,${person.name}
这样的字符串表达式的计算结果为字符串。
如何使用El、javax.el、OGNL或类似的Commons来实现这一点?必须是独立库。
和我知道Java: using EL outside J2EE,并且已经看到JSTL/JSP EL (Expression Language) in a non JSP (standalone) context。这不是我要找的。
我正在寻找的是添加什么依赖项,然后如何初始化解析器的示例,该解析器将具有:
并允许我执行以下操作:
并且我需要它使用一些有理性值,例如,在null
上使用""
,而不是抛出NPE左右。
推荐答案
有相当多的EL引擎,其中大部分实现了JAVA表达式语言API。
公地EL(http://jakarta.apache.org/commons/el/) 实现了一直存在的JSPEL API。该库可以在许多JSP容器(例如Tomcat)中找到,或者在许多供应商的J2EE服务器中用作的基础。
OGNL(http://commons.apache.org/proper/commons-ognl/) 当今最具表现力的ELs之一,广泛用于WebWork(Struts2)和Tapestry。
MVEL(https://github.com/mvel/mvel) EL的新手,这是MVFlex/Valhara项目的一部分。特性看起来更符合OGNL提供的方法调用和一些有趣的正则表达式支持。
(统一)表达式语言(https://jcp.org/aboutJava/communityprocess/final/jsr341/index.html和http://jcp.org/en/jsr/detail?id=245) 标准表达式语言首先在Java EE 5(EL 2.1)中引入,并在Java EE 6(EL 2.2)和Java EE 7(EL 3.0)中得到增强。来自GlassFish项目的参考实现- 统一表达式语言。
JEXL(http://jakarta.apache.org/commons/jexl/) 一种基于Velocity解析器的实现。因此,它更像是一个有限的模板解决方案,具有方法调用之类的功能。
Source
目前,我使用BeanUtils结束了此代码-虽然很难看,但很好用。
这篇关于Java:如何在不实现接口的情况下独立(在任何Web框架之外)计算EL表达式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!