当前位置:网站首页 > Java教程 > 正文

java jexl教程



JEXL 是 Java 编程语言中一种表达式语言引擎,可以用来校验数据等。那么 Java 具体是怎么使用JEXL这个引擎的?下面,我将通过 Java 实例代码为大家展示 Java 是如何用 JEXL 引擎实现动态表达式编译。

做项目突然遇到这样的需求:
系统要获取多个数据源的数据,并进行处理,最后输出多个字段。字段的计算规则一般是简单的取值最多加一点条件判断。
而且需要动态变动!!例如一个字段a的取值,如果a > 10的时候输出10,a <= 10则输出a。这里的10可能在一天后改成8,也可能在后天就改成了12。当然,如果只是一个数字的变动还好说,我们可以使用数据库进行存储。但是,万一哪天需求突然变成了a < 10的时候输出10,a >=10 则输出a,就需要对代码改动,再测试再发布才能到生产环境使用。
一两个这样的字段还没什么,如果整个系统所依赖的字段都有这样的属性,那么我们就需要找一种方法来实现动态的加载逻辑。
下面介绍的JEXL就可以解决这种问题

JEXL(Java Expression Language)介绍

JEXL – Apache Commons JEXL Overview

下面用一些实例来介绍JEXL的使用方法

实例

正则表达式匹配

首先写一个公共方法:

下面是使用JEXL调用的方法

代码中的expression变量就是可以动态编译的表达式,这里要注意表达式中出现的所有变量,都需要事先set进JexlContext中,否则会报错。这里有多种形式的错误:

①如果没有set”Util”,程序运行中会抛出异常。

org.apache.commons.jexl2.JexlException: TmpTest.RL@40![13,40]: 'ans = QeUtil.regMatch('[一-龥]{10,}', str);' attempting to call method on null

②如果没有set”str”,程序不会抛出异常,并输出null。如果你的regMatch方法中有判空处理,就会输出判空的结果。如果没有判空处理,在控制台的输出如下:

警告: TmpTest.RL@39![36,39]: 'ans = QeUtil.regMatch('[一-龥]{10,}', str);' undefined variable str
二月 21, 2017 4:00:41 下午 org.apache.commons.jexl2.JexlEngine invocationFailed
警告: TmpTest.RL@39![13,40]: 'ans = QeUtil.regMatch('[一-龥]{10,}', str);' method invocation error
java.lang.NullPointerException

循环

JEXL支持两种循环方式:

下面是使用while的实例:

getset方法调用

上面的用例会在控制台先输出1,再输出2

以上就是关于 Java 使用 JEXL 引擎实现动态表达式的编译的全部内容,想要了解更多关于 Java JEXL 引擎的详细内容,可以搜素W3Cschool站内相关技术文章。

  • 上一篇: java教程谁讲得好
  • 下一篇: java全面教程
  • 版权声明


    相关文章:

  • java教程谁讲得好2024-11-24 21:02:06
  • java笔记详细教程2024-11-24 21:02:06
  • java游戏安装教程2024-11-24 21:02:06
  • java中json详细教程2024-11-24 21:02:06
  • 用java写博客教程2024-11-24 21:02:06
  • java全面教程2024-11-24 21:02:06
  • java高级操作教程2024-11-24 21:02:06
  • java教程文库2024-11-24 21:02:06
  • java blade 教程2024-11-24 21:02:06
  • java教程新手入门2024-11-24 21:02:06