2

有一个 JEXL 表达式,我如何解析它以便将所有涉及的变量动态添加到 JEXL 上下文中?

示例:初始表达式:

Initial Expression = $VAR1 + $VAR2

VAR1 和 VAR2 是其他表达式

$VAR1 = 123 + 45
$VAR2 = 67 + 89

更多的 VAR1 可以有另一个深度级别:

$VAR1 = 123 + 45 + $VAR3

因此,在评估 Initial expression 之前,我需要将 VAR1 和 VAR2 和 VAR3 添加到上下文中,我该如何以动态方式进行呢?

可以使用 JEXL 解析器吗?或者通过捕获 JEXL 异常?你能举个例子吗?

问候

4

1 回答 1

0

你根本不需要担心它。JEXL 处理它。

但是,首先,您应该使用Script evaluator,而不是Expression evaluator。脚本评估器确实可以很好地处理多个语句并支持复杂的循环语法。

这里

JexlScript

这些允许您使用多个语句,并且您可以使用变量赋值、循环、计算等。或多或少可以在 Shell 或 JavaScript 中实现其基本级别。最后一个命令的结果从脚本返回。

JxltEngine.Expression

这些是生成“单行”文本的理想选择,例如类固醇上的“toString()”。要进行计算,请使用 ${someVariable} 中类似 EL 的语法。括号之间的表达式的行为类似于 JexlScript,而不是表达式。您可以使用分号来执行多个命令,最后一个命令的结果会从脚本中返回。您还可以使用 #{someScript} 语法使用 2-pass 评估。

现在,试试下面:

String script =     
            "var var1 = 123 + 45;"
        +   "var var2 = 67 + 89;"
        +   "var var = var1 + var2;"
        +   "return var;";

JexlContext jexlContext = new MapContext();

JexlEngine jexlEngine=new JexlBuilder().create();

System.out.println(jexlEngine.createScript(script).execute(jexlContext); // 134
于 2018-04-20T04:33:27.643 回答