2016-07-15 26 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

関連する問題