流口水输入验证并停止执行

时间:2013-11-13 23:07:37

标签: 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(!$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

1 个答案:

答案 0 :(得分:0)

我怀疑您认为在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" )

虽然没有经过测试,但我并不完全确定。