SlideShare a Scribd company logo
By: Saurabh Dixit
 Groovy server pages
 Taglibs
 Validators in grails
 View pages with the extension gsp, gsp
stands for groovy server page
 All default groovy tags along with custom
tags defined in the tag lib can be accessed in
these pages.
 Tags can be created inside taglib folder in grails:
classWidgetsTagLib {
static namespace = “appTags"
ApplicationContext applicationContext
/**
* Extends the regular grails pagination
*/
def paginate = { attrs ->
// DO some operation
}
Tags inside taglib can be accessed on the GSP pages through the name space:
<appsTags:paginate/>
appsTags: Name space defined in the tag lib
Paginate: Method in the file
 Declaring Constraints:
 Within a domain class constraints are defined with the
constraints property that is assigned a code block:
class User {
String login
String password
String email
Integer age
static constraints = {
…
}
}
 You then use method calls that match the property
name for which the constraint applies in combination
with named parameters to specify 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
}
}
 In that example we've declared that the login
property must be between 5 and 15 characters long,
it cannot be blank and must be unique.We've also
applied other constraints to the password, email
and age properties.
 By default, all domain class properties are not
nullable (i.e. they have an implicit nullable:false
constraint).
 A complete reference for the available constraints
can be found in the Quick Reference section under
the Constraints heading.
class User {
...
static constraints = {
// this Date object is created when the constraints are evaluated, not
// each time an instance of the User class is validated.
birthDate max: new Date()
}
}
Custom validator:
class Response {
…
static constraints = {
survey blank: false
answer blank: false, validator: { val, obj -> val in
obj.survey.answers }
}
}
 Validating Constraints:
 Call the validate method to validate a domain class
instance:
def user = new User(params)
if (user.validate()) {
// do something with user
}
else {
user.errors.allErrors.each {
println it
}
}
 The errors property on domain classes is an instance of the
Spring Errors interface.The Errors interface provides methods
to navigate the validation errors and also retrieve the original
values.
 Validation Phases:
 Within Grails there are two phases of validation,
the first one being data binding which occurs
when you bind request parameters onto an
instance such as:
def user = new User(params)
 At this point you may already have errors in the
errors property due to type conversion (such as
converting Strings to Dates).You can check these
and obtain the original input value using the Errors
API:
if (user.hasErrors()) {
if (user.errors.hasFieldErrors("login")) {
println user.errors.getFieldError("login").rejectedValue
}
}
 The second phase of validation happens when you call
validate or save.This is when Grails will validate the
bound values againts the constraints you defined.
 For example, by default the save method calls validate
before executing, allowing you to write code like:
if (user.save()) {
return user
}
else {
user.errors.allErrors.each {
println it
}
}
 Importing Constraints:
 Grails 2 introduced an alternative approach to sharing
constraints that allows you to import a set of constraints from
one class into another.
 Let's say you have a domain class like so:
class User {
String firstName
String lastName
String passwordHash
static constraints = {
firstName blank: false, nullable: false
lastName blank: false, nullable: false
passwordHash blank: false, nullable: false
}
}
 You then want to create a command object,
UserCommand, that shares some of the properties of
the domain class and the corresponding constraints.You
do this with the importFrom() method:
class UserCommand {
String firstName
String lastName
String password
String confirmPassword
static constraints = {
importFrom User
password blank: false, nullable: false
confirmPassword blank: false, nullable: false
}
}
 If you want more control over which constraints are
imported, use the include and exclude arguments.
 Both of these accept a list of simple or regular
expression strings that are matched against the
property names in the source constraints.
 So for example, if you only wanted to import the
'lastName' constraint you would use:
…
static constraints = {
importFrom User, include: ["lastName"]
…
}
 or if you wanted all constraints that ended with
'Name':
…
static constraints = {
importFrom User, include: [/.*Name/]
…
}
 Validation on the Client:
 Displaying Errors:
▪ Typically if you get a validation error you redirect back to
the view for rendering. Once there you need some way
of displaying errors.
▪ Grails supports a rich set of tags for dealing with errors.
▪ To render the errors as a list you can use renderErrors:
<g:renderErrors bean="${user}" />
 If you need more control you can use hasErrors
and eachError:
<g:hasErrors bean="${user}">
<ul>
<g:eachError var="err" bean="${user}">
<li>${err}</li>
</g:eachError>
</ul>
</g:hasErrors>
 ApplyingValidation to Other Classes:
 Domain classes and command objects support
validation by default.
 Other classes may be made validateable by
defining the static constraints property in the
class (as described above) and then telling the
framework about them.
 It is important that the application register the
validateable classes with the framework. Simply
defining the constraints property is not sufficient.
 TheValidateable Annotation:
 Classes which define the static constraints property and
are annotated with @Validateable can be made
validateable by the framework.
 Consider this example:
// src/groovy/com/mycompany/myapp/User.groovy
package com.mycompany.myapp
import grails.validation.Validateable
@Validateable
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
}
}
Grails basics  part2

More Related Content

PPT
2310 b 07
PPT
27. mathematical, date and time functions in VB Script
PPTX
Controllers & actions
PDF
Chapter 3 (validation control)
DOCX
Validation using javascripts by karan chanana
PDF
How to send hidden value from blade to laravel controller?
PPTX
Grails basics
PPTX
Test automation in Loris
2310 b 07
27. mathematical, date and time functions in VB Script
Controllers & actions
Chapter 3 (validation control)
Validation using javascripts by karan chanana
How to send hidden value from blade to laravel controller?
Grails basics
Test automation in Loris

What's hot (20)

PDF
Practical TypeScript
PDF
TDD, BDD and mocks
PPTX
Javascript conditional statements
PPTX
Redux training
PDF
React, Redux, ES2015 by Max Petruck
PPTX
React with Redux
PPTX
PDF
React state managmenet with Redux
PDF
Introduction To Angular's reactive forms
PPTX
Combres
PDF
Tdd iPhone For Dummies
KEY
How To Test Everything
PPTX
Asp PPT (.NET )
PDF
Workshop 20: ReactJS Part II Flux Pattern & Redux
PDF
Excellent
PDF
React.js or why DOM finally makes sense
PDF
Object-Oriented JavaScript
PDF
Rails is not just Ruby
PPT
QTP Functions
Practical TypeScript
TDD, BDD and mocks
Javascript conditional statements
Redux training
React, Redux, ES2015 by Max Petruck
React with Redux
React state managmenet with Redux
Introduction To Angular's reactive forms
Combres
Tdd iPhone For Dummies
How To Test Everything
Asp PPT (.NET )
Workshop 20: ReactJS Part II Flux Pattern & Redux
Excellent
React.js or why DOM finally makes sense
Object-Oriented JavaScript
Rails is not just Ruby
QTP Functions
Ad

Similar to Grails basics part2 (20)

ODP
Grails 0.3-SNAPSHOT Presentation WJAX 2006 English
PDF
Jasigsakai12 columbia-customizes-cas
PPT
Csharp4 inheritance
DOC
Wheels
PPT
ASP.NET 05 - Exception Handling And Validation Controls
PPT
validation & regular expression chacteristics
PDF
RubyOnRails-Cheatsheet-BlaineKendall
PDF
RubyOnRails-Cheatsheet-BlaineKendall
PPT
Introduction To Grails
PDF
Validation in Jakarta Struts 1.3
PPTX
How to perform debounce in react
PPTX
Grails Advanced
PPT
Test strategy for web development
ODP
Forms With Ajax And Advanced Plugins
PPTX
Compatibility Detector Tool of Chrome extensions
PDF
Spring 3: What's New
DOCX
Exception handling
PDF
PDF
Angular JS2 Training Session #1
PDF
Beginning AngularJS
Grails 0.3-SNAPSHOT Presentation WJAX 2006 English
Jasigsakai12 columbia-customizes-cas
Csharp4 inheritance
Wheels
ASP.NET 05 - Exception Handling And Validation Controls
validation & regular expression chacteristics
RubyOnRails-Cheatsheet-BlaineKendall
RubyOnRails-Cheatsheet-BlaineKendall
Introduction To Grails
Validation in Jakarta Struts 1.3
How to perform debounce in react
Grails Advanced
Test strategy for web development
Forms With Ajax And Advanced Plugins
Compatibility Detector Tool of Chrome extensions
Spring 3: What's New
Exception handling
Angular JS2 Training Session #1
Beginning AngularJS
Ad

Recently uploaded (20)

PPT
Teaching material agriculture food technology
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
KodekX | Application Modernization Development
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Encapsulation theory and applications.pdf
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
MYSQL Presentation for SQL database connectivity
PPTX
Spectroscopy.pptx food analysis technology
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
cuic standard and advanced reporting.pdf
PDF
Empathic Computing: Creating Shared Understanding
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
Teaching material agriculture food technology
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
KodekX | Application Modernization Development
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
The Rise and Fall of 3GPP – Time for a Sabbatical?
Spectral efficient network and resource selection model in 5G networks
Chapter 3 Spatial Domain Image Processing.pdf
Encapsulation theory and applications.pdf
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
NewMind AI Weekly Chronicles - August'25 Week I
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
MYSQL Presentation for SQL database connectivity
Spectroscopy.pptx food analysis technology
Diabetes mellitus diagnosis method based random forest with bat algorithm
cuic standard and advanced reporting.pdf
Empathic Computing: Creating Shared Understanding
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Advanced methodologies resolving dimensionality complications for autism neur...

Grails basics part2

  • 2.  Groovy server pages  Taglibs  Validators in grails
  • 3.  View pages with the extension gsp, gsp stands for groovy server page  All default groovy tags along with custom tags defined in the tag lib can be accessed in these pages.
  • 4.  Tags can be created inside taglib folder in grails: classWidgetsTagLib { static namespace = “appTags" ApplicationContext applicationContext /** * Extends the regular grails pagination */ def paginate = { attrs -> // DO some operation } Tags inside taglib can be accessed on the GSP pages through the name space: <appsTags:paginate/> appsTags: Name space defined in the tag lib Paginate: Method in the file
  • 5.  Declaring Constraints:  Within a domain class constraints are defined with the constraints property that is assigned a code block: class User { String login String password String email Integer age static constraints = { … } }
  • 6.  You then use method calls that match the property name for which the constraint applies in combination with named parameters to specify 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 } }
  • 7.  In that example we've declared that the login property must be between 5 and 15 characters long, it cannot be blank and must be unique.We've also applied other constraints to the password, email and age properties.  By default, all domain class properties are not nullable (i.e. they have an implicit nullable:false constraint).
  • 8.  A complete reference for the available constraints can be found in the Quick Reference section under the Constraints heading. class User { ... static constraints = { // this Date object is created when the constraints are evaluated, not // each time an instance of the User class is validated. birthDate max: new Date() } } Custom validator: class Response { … static constraints = { survey blank: false answer blank: false, validator: { val, obj -> val in obj.survey.answers } } }
  • 9.  Validating Constraints:  Call the validate method to validate a domain class instance: def user = new User(params) if (user.validate()) { // do something with user } else { user.errors.allErrors.each { println it } }  The errors property on domain classes is an instance of the Spring Errors interface.The Errors interface provides methods to navigate the validation errors and also retrieve the original values.
  • 10.  Validation Phases:  Within Grails there are two phases of validation, the first one being data binding which occurs when you bind request parameters onto an instance such as: def user = new User(params)
  • 11.  At this point you may already have errors in the errors property due to type conversion (such as converting Strings to Dates).You can check these and obtain the original input value using the Errors API: if (user.hasErrors()) { if (user.errors.hasFieldErrors("login")) { println user.errors.getFieldError("login").rejectedValue } }
  • 12.  The second phase of validation happens when you call validate or save.This is when Grails will validate the bound values againts the constraints you defined.  For example, by default the save method calls validate before executing, allowing you to write code like: if (user.save()) { return user } else { user.errors.allErrors.each { println it } }
  • 13.  Importing Constraints:  Grails 2 introduced an alternative approach to sharing constraints that allows you to import a set of constraints from one class into another.  Let's say you have a domain class like so: class User { String firstName String lastName String passwordHash static constraints = { firstName blank: false, nullable: false lastName blank: false, nullable: false passwordHash blank: false, nullable: false } }
  • 14.  You then want to create a command object, UserCommand, that shares some of the properties of the domain class and the corresponding constraints.You do this with the importFrom() method: class UserCommand { String firstName String lastName String password String confirmPassword static constraints = { importFrom User password blank: false, nullable: false confirmPassword blank: false, nullable: false } }
  • 15.  If you want more control over which constraints are imported, use the include and exclude arguments.  Both of these accept a list of simple or regular expression strings that are matched against the property names in the source constraints.
  • 16.  So for example, if you only wanted to import the 'lastName' constraint you would use: … static constraints = { importFrom User, include: ["lastName"] … }  or if you wanted all constraints that ended with 'Name': … static constraints = { importFrom User, include: [/.*Name/] … }
  • 17.  Validation on the Client:  Displaying Errors: ▪ Typically if you get a validation error you redirect back to the view for rendering. Once there you need some way of displaying errors. ▪ Grails supports a rich set of tags for dealing with errors. ▪ To render the errors as a list you can use renderErrors: <g:renderErrors bean="${user}" />
  • 18.  If you need more control you can use hasErrors and eachError: <g:hasErrors bean="${user}"> <ul> <g:eachError var="err" bean="${user}"> <li>${err}</li> </g:eachError> </ul> </g:hasErrors>
  • 19.  ApplyingValidation to Other Classes:  Domain classes and command objects support validation by default.  Other classes may be made validateable by defining the static constraints property in the class (as described above) and then telling the framework about them.  It is important that the application register the validateable classes with the framework. Simply defining the constraints property is not sufficient.
  • 20.  TheValidateable Annotation:  Classes which define the static constraints property and are annotated with @Validateable can be made validateable by the framework.  Consider this example: // src/groovy/com/mycompany/myapp/User.groovy package com.mycompany.myapp import grails.validation.Validateable @Validateable 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 } }