2013-09-23 93 views
0

如果我嘗試訪問一個java bean的屬性與getter它給我的錯誤,而使用bean屬性直接正常工作。我知道直接使用bean屬性是documentation中所述的推薦方式。不過,在這種情況下,我更喜歡使用getter來達到某些特定的原因。getter訪問bean屬性給出錯誤

這是規則文件和我得到的錯誤。希望得到任何線索,爲什麼我會得到這種奇怪的行爲。

規則文件

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; 
    } 
} 
+0

可以肯定的是,如果您使用bean屬性而不是顯式getter,則該規則可以很好地工作嗎?你的帖子不包括這個事實,它是否有你所指的屬性?你可以發佈嗎? – kaskelotti

+0

@Jndy:事實確實如此。我已經添加了相關的java類。非常感謝這方面的任何幫助。 –

回答

0

看起來像類加載器已加載Drools 5.1.1,這似乎是問題的原因。當我切換到Drools 5.5.0 Final時,問題得到了解決。

0

這應該工作: $ ALT:MatHotelAlternative(加工==假,starRating == 「*」)

,你可以嘗試用? 你用這種方法得到了哪些錯誤?

+0

謝謝你的回答。這個事實上就像我在問題中提到的那樣工作。我只是想知道爲什麼它不使用gettets。 –