Validation 降低输入验证并停止执行
我必须验证一些元素是否为null,如果它们为null,则停止执行 我很少有像下面这样的规则来检查一些空值并添加错误Validation 降低输入验证并停止执行,validation,drools,Validation,Drools,我必须验证一些元素是否为null,如果它们为null,则停止执行 我很少有像下面这样的规则来检查一些空值并添加错误 rule "Require begin date for Service Period" salience 100 when $servicePeriod : ServicePeriod(beginDate == null) // check this to avoid the infinite loop eval(
rule "Require begin date for Service Period"
salience 100
when
$servicePeriod : ServicePeriod(beginDate == null)
// check this to avoid the infinite loop
eval(!$servicePeriod.getValidationErrors().contains("Begin date is required."))
then
$servicePeriod.getValidationErrors().add("Begin date is required.");update($servicePeriod);
end
我有一些规则,比如下面的规则,首先检查“validationErrors.size()==0”。即使验证错误大小大于零,它仍会继续检查其他验证,并且由于它们为空而失败。请让我知道如何修改这些规则以避免异常
// Rules for Firefighter deduction calculation
rule "Firefighter Annual Salary Deposit Calculation"
salience 50
when
$servicePeriod : ServicePeriod(validationErrors.size() == 0 , periodType.name == "DEPOSIT" , payType.name == "ANNUAL SALARY" , serviceType.name == "FIREFIGHTER" )
then
calculateDeduction($servicePeriod, 0.075);
end
我怀疑您认为在Java中,这些约束是从左到右计算的,因此如果第一个约束检查为0或null,那么进一步的约束是安全的。但是,在Drools逗号分隔约束中并非如此 我认为您可以切换到更具Java风格的表达式:
ServicePeriod(
validationErrors.size() == 0,
periodType != null && periodType.name == "DEPOSIT",
payType != null && payType.name == "ANNUAL SALARY",
serviceType != null && serviceType.name == "FIREFIGHTER" )
不过,如果没有测试,我不能完全确定