(Quick Reference)
Constraints Usage
Constraints provide Grails with a declarative DSL for defining validation rules, schema generation and CRUD generation meta data. An example of a set of constraints applied to a domain class are as follows:
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, nullable:false)
}
}
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 | To validate that a String value is not blank | login(blank:false) |
creditCard | To validate that a String value is a valid credit card number | cardNumber(creditCard:true) |
email | To validate that a String value is a valid email address. | homeEmail(email:true) |
inList | To validate that a value is within a range or collection of constrained values. | name(inList: ["Joe", "Fred", "Bob"]) |
matches | To validate that a String value matches a given regular expression. | login(matches: "[a-zA-Z]+") |
max | Ensures a value does not exceed the given maximum value. | age(max: new Date()) price(max:999F) |
maxSize | Ensures a value’s size does not exceed the given maximum value. | children(maxSize:25) |
min | Ensures a value does not fall below the given minimum value. | age(min: new Date()) price(min:0F) |
minSize | Ensures a value’s size does not fall below the given minimum value. | children(minSize:25) |
notEqual | Ensures 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 for domain class properties. | 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 | Constraints a property as unique at the database level | login(unique:true) |
url | To validate that a String value is a valid URL. | homePage(url:true) |
validator | Adds custom validation to a field. | See documentation |
Scaffolding
Some constraints affect (and only affect) 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 or not. 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 or not. 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. |