java - Drools - 使用 map 时解析器错误

标签 java drools mvel

我编写了一个简单的规则,当年龄大于 18 岁时,该规则会打印人员的姓名。

以下作品:

import java.util.Map;

rule "PrintNameWhenAgeWhenGreaterThan18"
 dialect "mvel"
 when
    $data : Map()
 then
    if ($data.age > 18) {
        System.out.println($data.name);
    }
end

以下无效。为什么?

import java.util.Map;

rule "PrintNameWhenAgeWhenGreaterThan18"
 dialect "mvel"
 when
    $data : Map()
    $data.age > 18
 then
    System.out.println($data.name);
end

错误消息:

[10,13]: [ERR 102] Line 10:13 mismatched input '>' in rule "PrintNameWhenAgeWhenGreaterThan18"
[0,0]: Parser returned a null Package
Exception in thread "main" java.lang.IllegalArgumentException: Could not parse knowledge.

Java 代码:

final Map<String, Object> data = new HashMap<>();
data.put("name", "Joe");
data.put("age", new Integer(30));
kSession.insert(data);
kSession.fireAllRules();

我知道我应该创建并使用 Person 类。这只是一个示例,我试图弄清楚如何在 Drools 中通过 MVEL 方言使用 map 。

流口水版本:6.3.0 MVEL版本:2.2.6

谢谢!!

可能的解决方案: 看起来我需要在评估 boolean 表达式时使用 eval 语句?

import java.util.Map;

rule "PrintNameWhenAgeWhenGreaterThan18"
 dialect "mvel"
 when
    $data : Map()
    eval($data.age > 18)
 then
    System.out.println($data.name);
end

夏姆推荐

import java.util.Map;

rule "PrintNameWhenAgeWhenGreaterThan18"
 dialect "mvel"
 when
    $data : Map(age > 18)
 then
    System.out.println($data.name);
end

最佳答案

你尝试过吗?

rule "PrintNameWhenAgeWhenGreaterThan18"
 dialect "mvel"
 when
    $data : Map( age > 18 )
 then
    System.out.println($data.name);
end

关于java - Drools - 使用 map 时解析器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33992133/

相关文章:

java - BroadcastReceiver 未将数据发送回主类

java - 键减两个HashMap中值的有效方法

java - 创建基于邮政编码的服务

java - 通过 REST 调用 BRMS/Drools Logic 的良好设计

java - JBoss Drools 真的并行执行所有规则吗?

java - 流口水是心率峰值的规律

java - 使用 mvel 检查列表中是否存在元素

java - 有没有一个很好的独立的、轻量级的、基于 GUI 的 mac Java 调试工具?

java - 与 Velocity 和 Mvel 相比,Stringtemplate 性能较低

android - 错误 : expected receiver of type com. MyApp.Main,但得到了 java.lang.Class<com.MyApp.Main>