背景: 我正在尝试编写一个jboss drools模板来测试对象的值,无论是null还是空或有效的。
持有该值的属性是一个变量,具体取决于$ pitCaract值
例如$pitCaract=='C' => $valueProperty=valeurItemChaine
所以在我的模板中我想测试itemDataCheck.valeurItemChaine
这是我到目前为止所尝试的内容
template header
$pitCaract
$valueProperty
package fr.xxx.validation;
/*created on: Jun 20, 2017*/
import fr.xxx.fides.dashboard.questionnaire.api.models.items.ItemData;
import fr.xxx.fides.dashboard.questionnaire.api.models.types.Item;
import fr.xxx.fides.dashboard.questionnaire.api.checks.QuestionnaireItemException;
import fr.xxx.fides.dashboard.questionnaire.api.ExceptionMessage;
template "Blocking Objects check"
rule "pre-check of blocking @{$pitCaract} @{row.rowNumber}"
auto-focus true
agenda-group "validate"
dialect "mvel"
salience 100
when
$item: Item(
itemProperty.pitCaract== "@{$pitCaract}",
itemProperty.isMandatory
)
Boolean(booleanValue ==true ) from nullOrEmptyStr($item.itemDataCheck.@{$valueProperty} )
---------------------------------------------------------------^ this line
then
$item.setQuestionnaireItemException(new QuestionnaireItemException(ExceptionMessage.Blocking_item ,QuestionnaireItemException.ERROR ) );
delete($item);
end
end template
function boolean nullOrEmptyStr(Object o)
{
System.out.println("nullOrEmptyStr:"+o);
return o==null || o.toString().trim().isEmpty();
}
我收到了善意的错误消息
[错误:无法使用严格模式解析方法: java.lang.Object.valeurItemChaine()] [近:{... nullOrEmptyStr( $ item.itemDataCheck.valeurItemChaine)....}]
我试过了
$item: Item(
itemProperty.pitCaract== "@{$pitCaract}",
itemDataCheck!.@{$valueProperty}.toString().trim().isEmpty(),
itemProperty.isMandatory
)
和
$item: Item(
itemProperty.pitCaract== "@{$pitCaract}",
nullOrEmptyStr(itemDataCheck!.@{$valueProperty}),
itemProperty.isMandatory
)
但是没有运气让它发挥作用。
唯一可行的解决方案是itemDataCheck.@{$valueProperty}==null
,但这还不够,因为该值可能是一个空字符串。
感谢您的帮助