0
votes

Grails 2.2.3

My Custom Validator

bankCode( nullable: false, blank: false, minSize: 8, maxSize: 8, validator: {pValue, pDomain ->
        List<CashAccountMapping> lCashAccountMappingList =
            CashAccountMapping.findAllByBankCodeAndSchoolYear(pValue, pDomain.schoolYear )
        lCashAccountMappingList = lCashAccountMappingList - pDomain
        if (lCashAccountMappingList) {
            return 'cashAccountMapping.invalid.validator.message'
        }
    })

My custom error message is not returning as I would have thought. It is somewhere below how do I get out? I want to get it to a string of all errors to display to the user

if ( newCashAccountMapping.validate() ) {
    newCashAccountMapping.save(flush:true)
}
else {
    newCashAccountMapping.errors.each { it
        println it //Add to a string of errors
    }
}

In my messages.properties

cashAccountMapping.invalid.validator.message={0} XYZ

I get the following when running the code:

[Field error in object 'com.srm.ledger.CashAccountMapping' on field 'bankCode': rejected value [CK01 036]; codes [com.srm.ledger.CashAccountMapping.bankCode.validator.error.com.srm.ledger.CashAccountMapping.bankCode,com.srm.ledger.CashAccountMapping.bankCode.validator.error.bankCode,com.srm.ledger.CashAccountMapping.bankCode.validator.error.java.lang.String,com.srm.ledger.CashAccountMapping.bankCode.validator.error,cashAccountMapping.bankCode.validator.error.com.srm.ledger.CashAccountMapping.bankCode,cashAccountMapping.bankCode.validator.error.bankCode,cashAccountMapping.bankCode.validator.error.java.lang.String,cashAccountMapping.bankCode.validator.error,com.srm.ledger.CashAccountMapping.bankCode.cashAccountMapping.invalid.validator.message.com.srm.ledger.CashAccountMapping.bankCode,com.srm.ledger.CashAccountMapping.bankCode.cashAccountMapping.invalid.validator.message.bankCode,com.srm.ledger.CashAccountMapping.bankCode.cashAccountMapping.invalid.validator.message.java.lang.String,com.srm.ledger.CashAccountMapping.bankCode.cashAccountMapping.invalid.validator.message,cashAccountMapping.bankCode.cashAccountMapping.invalid.validator.message.com.srm.ledger.CashAccountMapping.bankCode,cashAccountMapping.bankCode.cashAccountMapping.invalid.validator.message.bankCode,cashAccountMapping.bankCode.cashAccountMapping.invalid.validator.message.java.lang.String,cashAccountMapping.bankCode.cashAccountMapping.invalid.validator.message,cashAccountMapping.invalid.validator.message.com.srm.ledger.CashAccountMapping.bankCode,cashAccountMapping.invalid.validator.message.bankCode,cashAccountMapping.invalid.validator.message.java.lang.String,cashAccountMapping.invalid.validator.message]; arguments [bankCode,Cash Account Mapping,CK01 036]; default message [Property [{0}] of class [{1}] with value [{2}] does not pass custom validation]]

1

1 Answers

1
votes

Try with:

if (lCashAccountMappingList) {
    return ['cashAccountMapping.invalid.validator.message']
}

Then grails will look for this property:

yourClassName.bankCode.cashAccountMapping.invalid.validator.message=Invalid {0} value

See the validator documentation for more examples.