首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >juel表达式验证(vs Janino)

juel表达式验证(vs Janino)
EN

Stack Overflow用户
提问于 2013-05-29 08:19:05
回答 2查看 1.3K关注 0票数 1

致电所有javax.el juel专家:-)

我们希望使用JUEL计算纯Java上下文中的表达式。这些表达式通常是数学表达式,由用户通过ui提供。另一个方面是,这些表达式是配置的一部分,以后只作为另一个进程的一部分进行计算。此外,表达式中使用的变量值仅作为此过程的一部分在后面可用。因此,我们希望在表达式创建时向用户提供基本验证,以便用户知道他的表达式不会在计算时崩溃。

我们以前用过Janino,但是我们用JUEL来代替它--它要快得多(而且我们有很多评估要达到低谷,吞吐量是很重要的等等)。此外,JUEL使用完全相同的表达式语法--即我们可以将它插入后端,并且它是向后兼容的。(只需在旧的Janino表达式周围添加${..}即可。

然而,我们对JUEL有一个问题--在对表达式进行评估之前,它是否可以验证所使用的表达式?

也就是这样的东西:

代码语言:javascript
运行
复制
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一起做这事?还是有人知道另一种方法?

谢谢,

卢卡斯

EN

回答 2

Stack Overflow用户

发布于 2013-05-29 13:26:49

表达式在使用expressionFactory.createValueExpression("${a+b}", ...)“编译”时被解析(read: validated)。稍后,评估将发生在`Expression.getValue(.)中。

我建议在计算时使用ELResolver机制来解析属性(x,y),而不是在解析时使用变量(用于常量,例如PI等)。为此,在使用ELContext.setValue(...)进行计算之前设置属性。

请注意,您不需要在解析时和计算时使用相同的ELContext实例。在解析上下文中设置变量和函数,在评估上下文中设置属性。

票数 0
EN

Stack Overflow用户

发布于 2013-10-02 08:46:25

我也有同样的问题。最后我给朱尔增加了我自己的分店。有一种新的验证方法,它在运行之前检查每个可能的方面(尽可能多)。我向juel提供了扩展服务,但他们认为最好是将Juel保持在最低水平。我本来打算找个地方分享的。如果需要的话,这可能会促使我更早地去做这件事。

-萨伊德

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16808775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档