调用所有 javax.el juel 专家:-)
我们想使用 JUEL 来评估纯 Java 上下文中的表达式。这些表达式通常是数学表达式,由用户通过 ui 提供。另一个方面是这些表达式是配置的一部分,并且仅在稍后作为另一个过程的一部分进行评估。此外,表达式中使用的变量值仅在稍后作为此过程的一部分可用。因此,我们希望在表达式创建时向用户提供基本验证,以便用户知道他的表达式在评估时不会失败。
我们之前使用过 Janino,但我们正在用 JUEL 替换它 - 它更快(并且我们有很多评估要达到低谷,吞吐量很重要等)。此外,JUEL 使用完全相同的表达式语法 - 即我们可以将它插入后端并且它是向后兼容的。(只需添加${..}
旧的 Janino 表达式。
但是,我们对 JUEL 有一个问题 - 有什么方法可以在评估正在使用的表达式之前对其进行验证?
即这样的东西:
context.getVariableMapper().setVariable("a",expressionFactory.createValueExpression(new Double(1), double.class));
context.getVariableMapper().setVariable("b", expressionFactory.createValueExpression(new Double(2), double.class));
ValueExpression expression = expressionFactory.createExpression("${a+b}", double.class, context);
Object result = expression.getValue(context);
执行println(result)
然后正确打印出 3。
使用 Janino,我可以编写表达式 a+b,如果它格式错误或返回不正确的返回类型(即不是双精度),我会得到一个异常。然后我可以使用它来即时验证用户输入,并强制用户在保存配置之前纠正任何错误。
有什么办法可以用 JUEL 做到这一点?或者有人知道另一种方法吗?
谢谢,
卢卡斯