从5.3迁移到6.x后,Drools规则问题

时间:2016-05-27 08:03:01

标签: drools

我在下面的规则中遇到问题。这在5.3中工作正常,但抛出错误(必须是布尔表达式)。

     String drl="import com.drools.Applicant;"
            + "rule \"Is of valid age\"  "
            + " when $a : Applicant(age > 18 && name matches \"(?i).*\"+ name + \"(.|\n|\r)*\")"
            + " then $a.setValid( true );  "
            + " System.out.println(\"validation: \" + $a.isValid());\n"+
              "end";

问题在于: "当$ a:申请人(年龄> 18&& name匹配\"(?i)。 \" + name + \"(。| \ n | \ r \ n ) \")"

任何建议。

1 个答案:

答案 0 :(得分:1)

表达式不正确,因为name无法作为表达的一部分解析。使用绑定。

$a : Applicant($n: name, age > 18, name matches \"(?i).*\"+ $name + \"(.|\n|\r)*\")"

(我认为约束没有多大意义 - 它只是一个测试名称是否与自身匹配,前后有或没有任意字符。此外,?i是多余的。)