2016-07-15 80 views
0

让我们假设ab是整数,和宠物是HashMap<String, Integer>MVEL表达不评估正确时预编译

类型的当我预编译下面的表达式中,pets.containsKey(\"Dogs\")节点是CompiledExpression对象内部空。

CompiledExpression compiledExpression = new ExpressionCompiler("a > 0 && b > 0 && pets.containsKey(\"Dogs\")").compile(); 
return (boolean) MVEL.executeExpression(compiledExpression, params); 

然而,当我这样做

boolean res = (boolean) MVEL.eval("a > 0 && b > 0 && pets.containsKey(\"Dogs\")", params); 

它工作得很好,我也得到适当的响应。

有什么办法可以预编译一个包含哈希表的对象的表达式吗?

+0

而不是硬编码参数,你可以用一个'地图<字符串,对象>',请参阅答案您正在使用哪个版本的发布 – Saravana

回答

0

我实现了以下两个以同样的方式,

Map<String, String> pets = new HashMap<>(); 
    pets.put("dog", "DOG"); 
    pets.put("cat", "CAT"); 
    Integer a = 10; 
    Integer b = 20; 

    Map<String, Object> params = new HashMap<>(); 
    params.put("$a", a); 
    params.put("$b", b); 
    params.put("$map", pets); 
    params.put("$key", "dog"); 

    CompiledExpression expression = new ExpressionCompiler("$a > 0 && $b > 0 && $map.containsKey($key)").compile(); 
    System.out.println(MVEL.executeExpression(expression, params)); 
    System.out.println(MVEL.eval("$a > 0 && $b > 0 && $map.containsKey($key)", params)); 
+0

? – Ramie

+0

来自Maven仓库的最新版本 – Saravana