使用getter提供错误来访问bean属性

时间:2013-09-23 05:55:00

标签: drools

如果我尝试使用getter访问java bean的属性,它会给我带来错误,而使用bean属性可以直接正常工作。我知道直接使用bean属性是documentation中所述的推荐方法。但是,在这种情况下,我更喜欢使用getter来解决某些特定原因。

这是规则文件和我得到的错误。我会理解为什么我会遇到这种奇怪的行为的任何线索。

规则文件

package test.rules

import java.lang.Math;
import test.MatFact;
import test.MatHotelAlternative;
import test.MatHotelItem;


dialect "mvel"

rule "0"
salience 0
when
    $item: MatHotelItem()
    $alt: MatHotelAlternative( processed == false
        && (getStarRating() == "*")
    )
then
    modify ($alt) {
        // some actions here
    }
end

错误

[16,26]: [ERR 101] Line 16:26 no viable alternative at input ')' in rule "0" in pattern MatHotelAlternative
[16,28]: [ERR 102] Line 16:28 mismatched input '==' expecting ')' in rule "0" in pattern MatHotelAlternative
[17,1]: [ERR 102] Line 17:1 mismatched input ')' expecting 'then' in rule "0"

相关课程

MatHotelAlternative

public class MatHotelAlternative extends MatItemAlternative<Hotel>
{
    public String getStarRating()
    {
        return alternative.getStarRating();
    }
}

MatItemAlternative

public abstract class MatItemAlternative<T extends HolidayItem>
{
    private boolean processed;
    protected T alternative;

    public MatItemAlternative( T alternative )
    {
        this.alternative = alternative;
    }

    public boolean isProcessed()
    {
        return processed;
    }

    public void setProcessed( boolean processed )
    {
        this.processed = processed;
    }
}

2 个答案:

答案 0 :(得分:0)

这应该有效: $ alt:MatHotelAlternative(已处理== false,starRating ==“*”)

你可以尝试一下吗? 你在这个替代方案中遇到了哪些错误?

答案 1 :(得分:0)

看起来类加载器一直在加载Drools 5.1.1,这似乎是导致问题的原因。当我切换到Drools 5.5.0 Final时,问题得到了解决。