【发布时间】:2013-05-29 08:19:05
【问题描述】:
调用所有 javax.el juel 专家 :-)
我们想使用 JUEL 来评估纯 Java 上下文中的表达式。这些表达式通常是数学表达式,由用户通过 ui 提供。另一个方面是这些表达式是配置的一部分,并且仅在稍后作为另一个过程的一部分进行评估。此外,表达式中使用的变量值仅在稍后作为此过程的一部分可用。因此,我们希望在表达式创建时向用户提供基本验证,以便用户知道他的表达式不会在评估时崩溃。
我们之前为此使用过 Janino,但我们正在用 JUEL 代替它 - 它要快得多(并且我们有 lot 的评估来达到低谷,吞吐量很重要,等等)。 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 做到这一点吗? 或者有人知道另一种方法吗?
谢谢,
卢卡斯
【问题讨论】:
-
如果你提出问题并得到答案,表现出某种反应总是好的风格。
标签: expression-evaluation janino juel