有一个JEXL表达式,我如何解析它以便动态地将所有涉及的变量添加到JEXL上下文?
示例:初始表达式:
Initial Expression = $VAR1 + $VAR2
VAR1和VAR2是其他表达式
$VAR1 = 123 + 45
$VAR2 = 67 + 89
更多VAR1可以有另一个深度级别:
$VAR1 = 123 + 45 + $VAR3
所以,在评估初始表达式之前,我需要添加到上下文VAR1和VAR2以及VAR3中,我该如何以动态的方式进行?
可以使用JEXL解析器吗?或者通过捕获JEXL例外?你能提供一个例子吗?
此致
答案 0 :(得分:0)
您根本不需要担心。 JEXL处理它。
但是,首先,您应该使用脚本评估程序,而不是表达式评估程序。脚本评估器可以很好地处理多个语句,并支持复杂的循环语法。
请参阅install SSH
<强> JexlScript 强>
这些允许您使用多个语句,您可以使用变量 任务,循环,计算等。或多或少可以 在Shell或JavaScript的基础级别实现。结果来自 从脚本返回最后一个命令。
<强> JxltEngine.Expression 强>
这些是生成“单行”文本的理想选择,就像'toString()'一样 类固醇。要进行计算,请使用类似EL的语法 $ {} someVariable。括号之间的表达式表现出来 像一个JexlScript,而不是表达。你可以用分号来 执行多个命令,最后一个命令的结果是 从脚本返回。您还可以使用2次传球 使用#{someScript}语法进行评估。
现在,请尝试以下:
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