简体   繁体   中英

Grails: Apply a custom constraint to all fields of an Domain class

In Grails it's possible to define global constraints within the Config.groovy file which can be used to validate all defined constraints from every domain class using

Config.groovy:
    grails.gorm.default.constraints = {
        '*'(nullable: true)
        ...
    }

Question: Is it also possible to define a constraint which is only used for the fields of one domain class? I'm thinking about something like this (which isn't working in reality)

class myDomainClass{
fields
...

static constraints = {
'*'(MyCustomCOnstraint:true)

}

}

I don't know if there is a standard solution to that.

In case there is not, you can build a loop inside the constraint closure:

static constraints = {
  // use MyCustomCOnstraint:true for fields firstname, lastname and address
  ['firstname', 'lastname', 'address'].each { property ->
    "$property"(MyCustomCOnstraint:true)
  }
}

A few things you could take a look at :

  1. a hack for backward compatibility - since grails 2.3.4 I think : in your config.groovy
 // Null object error fix for backward compatibility grails.databinding.convertEmptyStringsToNull = false 

This stops converting blanks to nulls - and may cure your issue, there was a reason why this feature was added - for your own app security... so choose wisely.

  1. You could take a look at programming Grails by Burt Beckwith chapter 3 covers custom validation, from install-templates to making extreme custom validation:

import com.myapp.MyUserValidator beans = { 'com.myapp.UserValidator'(MyUserValidator) }

But to be honest I really don't think there is anything is that segment that could help besides the bit that discusses setting up a filter to convert all input blanks to nulls:

convertBlanksToNullsAndTrim

You could reverse that code so that if it is null make it =''. again with the above point in place if is as per default it could get set as null unless point 1 is set in your config.groovy

If it were me I would try the first option to see if it cures current situation

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM