Validation 降低输入验证并停止执行

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(

我必须验证一些元素是否为null,如果它们为null,则停止执行

我很少有像下面这样的规则来检查一些空值并添加错误

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" )
不过,如果没有测试,我不能完全确定