(Quick Reference)
Constraints Usage
Constraints provide Grails with a declarative DSL for defining validation rules, schema generation and CRUD generation meta data. For example, consider these constraints:
class User {
... static constraints = {
login size: 5..15, blank: false, unique: true
password size: 5..15, blank: false
email email: true, blank: false
age min: 18
}
}Refer to the user guide topic on
Constraints for more information.
Global Constraints
You can apply constraints globally inside
grails-app/conf/Config.groovy as follows:
grails.gorm.default.constraints = {
'*'(nullable: true, size: 1..20)
}The wildcard signifies that the constraints apply to all properties. You can also define shared constraints:
grails.gorm.default.constraints = {
myShared(nullable: true, size: 1..20)
}That can be reused in your class:
class User {
... static constraints = {
login(shared: "myShared")
}
}Quick reference
| Constraint | Description | Example |
|---|
| blank | Validates that a String value is not blank | login(blank:false) |
| creditCard | Validates that a String value is a valid credit card number | cardNumber(creditCard: true) |
| email | Validates that a String value is a valid email address. | homeEmail(email: true) |
| inList | Validates that a value is within a range or collection of constrained values. | name(inList: ["Joe", "Fred", "Bob"]) |
| matches | Validates that a String value matches a given regular expression. | login(matches: "[a-zA-Z]+") |
| max | Validates that a value does not exceed the given maximum value. | age(max: new Date()) price(max: 999F) |
| maxSize | Validates that a value's size does not exceed the given maximum value. | children(maxSize: 25) |
| min | Validates that a value does not fall below the given minimum value. | age(min: new Date()) price(min: 0F) |
| minSize | Validates that a value's size does not fall below the given minimum value. | children(minSize: 25) |
| notEqual | Validates that that a property is not equal to the specified value | login(notEqual: "Bob") |
| nullable | Allows a property to be set to null - defaults to false. | age(nullable: true) |
| range | Uses a Groovy range to ensure that a property's value occurs within a specified range | age(range: 18..65) |
| scale | Set to the desired scale for floating point numbers (i.e., the number of digits to the right of the decimal point). | salary(scale: 2) |
| size | Uses a Groovy range to restrict the size of a collection or number or the length of a String. | children(size: 5..15) |
| unique | Constrains a property as unique at the database level | login(unique: true) |
| url | Validates that a String value is a valid URL. | homePage(url: true) |
| validator | Adds custom validation to a field. | See documentation |
Scaffolding
Some constraints have no impact on persistence but customize the scaffolding. It's not usually good practice to include UI information in your domain, but it's a great convenience if you use Grails' scaffolding extensively.
| Constraint | Description |
|---|
| display | Boolean that determines whether the property is displayed in the scaffolding views. If true (the default), the property is displayed. |
| editable | Boolean that determines whether the property can be edited from the scaffolding views. If false, the associated form fields are displayed in read-only mode. |
| format | Specify a display format for types that accept one, such as dates. For example, 'yyyy-MM-dd'. |
| password | Boolean indicating whether this is property should be displayed with a password field. Only works on fields that would normally be displayed with a text field. |
| widget | Controls what widget is used to display the property. For example, 'textArea' will force the scaffolding to use a <textArea> tag. |