簡體   English   中英

在使用某些給定參數讀取 Drools Drt 時,規則中的條件部分會因空字符串或 null 值而消失

[英]While reading Drools Drt with some given Parameter, The condition part in rule gets disappear for the Empty String or null values

使用一些空值運行 Drools DRT 時會出錯。

這是我們使用的模板......

rule "Rule1_@{row.rowNumber}"
 salience @{salience}
 dialect "java"
when
      variable:Fact(Context == "@{context}")
then
      list.add("@{name}");
end

當參數不為空時,例如@{context}=="PROCESSING",我們得到的規則就是這個,它就是我們想要的規則。

rule "Rule1_0"
 salience 1
 dialect "java"
when
      variable:Fact(Context == "PROCESSING")
then
      list.add("Task");
end

但是當參數為空時,例如當我們提供 @{context}==""空字符串null時,我們得到的規則是

rule "Rule1_0"
 salience 1
 dialect "java"
when

then
      list.add("Task");
end

但是在參考文檔時,它說 == or.= 與 java 的 java.util.Objects 相同,但是當我們使用此運算符並提供 null 或空值時,它無法正常工作。

這是他們在文檔中寫的:- https://docs.jboss.org/drools/release/latest/drools-docs/html_single/#_patterns_and_constraints

== 運算符使用空安全的 equals() 語義而不是通常的相同語義。 例如,模式 Person( firstName == "John" ) 類似於 java.util.Objects.equals(person.getFirstName(), "John"),因為 "John" 不是 null,所以模式也相似到“約翰”.equals(person.getFirstName())。

.= 運算符使用 null-safe,equals() 語義而不是通常的不同語義。 例如。 模式 Person( firstName.= "John" ) 類似於.java,util.Objects.equals(person.getFirstName(), "John")。

我已經嘗試了所有的可能性,但答案對所有人都是一樣的。

是否有任何解決方案可以為具有空字符串或 null 值的參數運行 DRT 文件,或者是否有任何其他方法來編寫模板,如果是,那么它是什么。

問題是我們給了@Context 而不是@,應該有$。 當我們使用 $ 時,它工作得非常好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM