Web - Grails Documentation -
Articulos básicos para comenzar con Grails
por (SpringSource) ...
http://grails.org/Documentation
domingo, 24 de julio de 2011
martes, 19 de julio de 2011
Uso de belongsTo y hasMany - Clases de Dominio
Uso de las Clases de Dominio
En Grails un dominio es una clase, ubicada en el directorio: grails-app/domain.
Una clase de dominio se crea con el comando: grails create-domain-class Book.
Se edita el archivo creado con el editor preferido.
ejemplo:
class Book {
String title
Date releaseDate
Author author
}
El nombre de la clase, por defecto, se relacionan con el nombre de tabla en minúsculas y separadas por guiones en lugar de mayúsculas y minúsculas. Mientras que cada propiedad se asigna a las columnas individuales.
Consulte la sección de guía de usuario en GORM para más información.
- Creamos un aplicación en Grails
- abrimos la consola, escribimos el comando
- grails create-app biblio
- escribimos el comando cd biblio para entrar a la aplicación
belongsTo
Define una relación de "Pertenece a", donde la clase especificada por belongsTo asume la propiedad de la relación. Esto tiene el efecto de controlar la forma en cascada de eliminaciones. En otras palabras,el lado de ser dueño de eliminaciones en cascada cuando el belongsTo se especifica en el lado inverso.
Creamos la clase de dominio con el comando: grails create-domain-class Book
Se edita el archivo creado con el editor preferido, quedando de la siguiente manera:
ejemplo:
class Book { String title static belongsTo = [author:Author] }
Crearemos el controlador de Book con el comando:
grails generate-controller Book
En Grails el controlador esta ubicado en el directorio: grails-app/controller.
quedando de la siguiente manera:
class BookController {
def scaffold = Book
}
En este ejemplo, la clase de libro se especifica que pertenece a la clase Autor, por lo tanto, cuando una instancia Autor se elimina también todos los casos relacionadoscon el Libro del Autor
hasMany
Define una asociación uno-a-muchos entre dos clases.
Creamos la clase de dominio con el comando: grails create-domain-class Author
Se edita el archivo creado con el editor preferido, quedando de la siguiente manera:
ejemplo:
class Author { String name static hasMany = [books:Book] }
Crearemos el controlador de Author con el comando:
grails generate-controller Author
En Grails el controlador esta ubicado en el directorio: grails-app/controller.
quedando de la siguiente manera:
class AuthorController {
def scaffold = Author
}
En este ejemplo se define una relación de uno a varios entre la clase Autor y de la clase Libro (un autor tiene muchos libros).
Por defecto GORM creará una propiedad de tipo java.util.Set utilizando la clave dentro de la definición del mapa hasMany. Por ejemplo, la definición:
Por defecto GORM creará una propiedad de tipo java.util.Set utilizando la clave dentro de la definición del mapa hasMany. Por ejemplo, la definición:
static hasMany = [books:Book]
Corremos la aplicación:
grails run-app
Referencia:
miércoles, 6 de julio de 2011
Constraints Grails
Descripción:
Las restricciones en Grails definen reglas de validación, generación de esquemas y CRUD generación de meta daros. Un ejemplo de conjunto de restricciones aplicadas a una clase de domino son:
email
Las restricciones en Grails definen reglas de validación, generación de esquemas y CRUD generación de meta daros. Un ejemplo de conjunto de restricciones aplicadas a una clase de domino son:
blank
Propósito
Validar que el String no esta vació
Ejemplo
login(blank:false)
Descripción
Poner en
falso
si un valor del string no puede ser vacióCodigo de Error:
className.propertyName.blank
creditCard
Purpose
To validate that a String value is a valid credit card number
Examples
cardNumber(creditCard:true)Description
Set to
true
if a string should be a credit card number. Internally uses the org.apache.commons.validator.CreditCardValidator
class.Error Code:
className.propertyName.creditCard.invalid
Purpose
To validate that a String value is a valid email address.
Examples
homeEmail(email:true)Description
Set to
true
if a string value is an email address. Internally uses the org.apache.commons.validator.EmailValidator
class.Error Code:
className.propertyName.email.invalid
inList
Purpose
To validate that a value is within a range or collection of constrained values.
Examples
name(inList:["Joe", "Fred", "Bob"] )Description
Constrains a value so that it must be contained within the given list. This constraint influences schema generation.
Error Code:
className.propertyName.not.inList
matches
Purpose
To validate that a String value matches a given regular expression.
Examples
login(matches:"[a-zA-Z]+")Description
Applies a regular expression against a string value.
Error Code:
className.propertyName.matches.invalid
max
Purpose
Ensures a value does not exceed the given maximum value.
Examples
age(max:new Date())price(max:999F)
Description
Sets the maximum value of a class that implements java.lang.Comparable. The same type needs to be used as the property itself. This constraint influences schema generation.
Error Code:
className.propertyName.max.exceeded
maxSize
Purpose
Ensures a value's size does not exceed the given maximum value.
Examples
children(maxSize:25)Description
This constraint influences schema generation.
Error Code:
className.propertyName.maxSize.exceeded
min
Purpose
Ensures a value does not fall below the given minimum value.
Examples
age(min:new Date())price(min:0F)
This constraint influences schema generation.
Referencia:
http://grails.org/doc/1.0.x/
Description
Sets the minimum value of a class that implements java.lang.Comparable. The same type needs to be used as the property itself. This constraint influences schema generation.
Error Code:
className.propertyName.min.notmet
minSize
Purpose
Ensures a value's size does not fall below the given minimum value.
Examples
children(minSize:25)Description
Sets the minimum size of a collection or number property. This constraint influences schema generation.
Error Code:
className.propertyName.minSize.notmet
notEqual
Purpose
Ensures that a property is not equal to the specified value
Examples
login(notEqual:"Bob")Description
Error Code:
className.propertyName.notEqual
nullable
Purpose
Allows a property to be set to
null
. By default Grails does not allow null
values for properties.Examples
age(nullable:true)Description
Set to
true
if the property allows null
values.Error Code:
className.propertyName.nullable
range
Purpose
Uses a Groovy range to ensure that a property's value occurs within a specified range
Examples
age(range:18..65)Description
Set to a Groovy range which can contain numbers in the form of an
IntRange
, dates or any object that implements Comparable
and providesnext
and previous
methods for navigation. This constraint influences schema generation.Error Code:
className.propertyName.range.toosmall
or className.propertyName.range.toobig
scale
Purpose
Set to the desired scale for floating point numbers (i.e., the number of digits to the right of the decimal point).
Examples
salary(scale:2)Description
Set to the desired scale for floating point numbers (i.e., the number of digits to the right of the decimal point). This constraint is applicable for properties of the following types:
java.lang.Float
, java.lang.Double
, and java.math.BigDecimal
(and its subclasses). When validation is invoked, this constraint determines if the number includes more nonzero decimal places than the scale permits. If so, it automatically rounds the number to the maximum number of decimal places allowed by the scale. This constraint does not generate validation error messages.This constraint influences schema generation.
Error Code: N/A
size
Purpose
Uses a Groovy range to restrict the size of a collection or number or the length of a String.
Examples
children(size:5..15)Description
Sets the size of a collection or number property or String length.
Currently this constraint cannot be used in addition to blank or nullable, a custom validator may be added to perform this kind of constraints.This constraint influences schema generation.
Error Code:
className.propertyName.size.toosmall
or className.propertyName.size.toobig
unique
Purpose
Constraints a property as unique at the database level
Examples
login(unique:true)Description
Set to true if the property must be unique (this is a persistent call and will query the database)
Scope of
unique
constraint can be specified by specifying the name of another property of the same class, or list of such names. The semantics in these cases is: pair of constrained property value and scope property value must be unique (or combination of constrained property value and all scope property values must be unique).Example:
group(unique:'department')In the above example
group
name must be unique in one department
but there might be groups with same name in different departments.Another example:
login(unique:['group','department'])In this example
login
must be unique in group
and department
. There might be same logins in different groups or different departments.url
Purpose
To validate that a String value is a valid URL.
Examples
homePage(url:true)Description
Set to
true
if a string value is a URL. Internally uses the org.apache.commons.validator.UrlValidator
class.Error Code:
className.propertyName.url.invalid
Referencia:
http://grails.org/doc/1.0.x/
Consola Grails
Descripción:
Este comando carga una interfaz gráfica de usuario donde se pueden escribir comandos de Groovy.
grails console
Este comando carga una interfaz gráfica de usuario donde se pueden escribir comandos de Groovy.
grails console
Groovy Server Pages (.gsp)
Groovy Servers Pages (o GSP para resumir) es la tecnología de vista de Grails. Esta esta diseñada para ser mas familiar para usuarios de tecnologías como ASP y JSP, pero ser aun mas flexible e intuitivo.
En Grails GSPs están en el directorio:
grails-app/views.
GSP soporta el uso de bloques
<% %>
para incrustar código de Groovy (este no se recomienda):<html> <body> <%="Hello GSP!" %> </body> </html>
GSP tambien soporta el estilo de comentarioa JSP del lado del servidor, ejemplo:
<body>
<%-- Este es mi comentario --%>
<%="Hola GSP!" %>
</body>
</html>
Variables and Scopes
Con el bloques<% %>
se pueden declarar variables:<% now = new Date() %>
Y entonces re usar esas variables más abajo de la página.
<%=now%>
martes, 5 de julio de 2011
Guardar Imagen en Base de Datos - Grails
Bienvenido GF
def scaffold = Imagen
<g:link action="show" id="${imagenInstance.id}">${fieldValue(bean: imagenInstance, field: "id")}
<img width="20%" height="20%" alt="Img" src="http://localhost:8080/ImgsGrailsApp/imagen/showImage/${imagenInstance.id}">
</g:link>
<g:link action="showImage" id="${imagenInstance.id}">${fieldValue(bean: imagenInstance, field: "id")}
<img alt="img" src="http://localhost:8080/ImgsGrailsApp/imagen/showImage/${imagenInstance.id}">
</g:link>
Crear un aplicación en Grails que guarde una imagen
Descripción:
App de grails que guarde imágenes
Nivel: Básico
1
1.1
abrir consola cmd
1.2
ir al directorio donde se quiera crear la aplicación: en windows para navegar por directorios en consola se usa el comando cd.
2
Crear aplicación: una vez en el directorio deseado: escribir el siguiente comando:
grails create-app ImgsGrailsApp
2.2
escribir en la consola para entrar a la aplicación: cd ImgsGrailsApp
3
Crear clase de dominio: escribir en consola:
grails create-domain-class imagen
3.2
editar el archivo creado localizado en:
ImgsGrailsApp\grails-app\domain\imgsgrailsapp\Imagen.groovy
opcionalmente puedes abrir una interfaz grafica donde se editan comandos groovy
escribir el comando:
grails console
ImgsGrailsApp\grails-app\domain\imgsgrailsapp\Imagen.groovy
opcionalmente puedes abrir una interfaz grafica donde se editan comandos groovy
escribir el comando:
grails console
3.3
el archivo quedaría de la siguiente forma:
class Imagen {
Date lastUpdated
Date dateCreated
byte[] screenshot
static constraints = {
screenshot(maxSize:1073741824)
}
}
4
crear el controlador: escribir en consola:
grails create-controller imagen
4.2editar el archivo creado localizado en:
ImgsGrailsApp\grails-app\controllers\imgsgrailsapp\ImagenController.groovy
4.3
añadimos el siguiente codigo:
def scaffold = Imagen
def showImage = {
def imagen = Imagen.get( params.id )
response.outputStream << imagen.screenshot
response.outputStream.flush()
}
5
generamos las vistas: escribir el comando:
grails generate-views imagen
nos creara los archivos de edición, crear, listar y mostrar de la clase Imagen
localizados en:
ImgsGrailsApp\grails-app\views\imagen
5.1
abrimos el archivo:
ImgsGrailsApp\grails-app\views\imagen\list.gspen este archivo esta lo que se va a mostrar cuando se vea la lista de imágenes
-vamos a la linea donde esta
<g:each in="${imagenInstanceList}" status="i" var="imagenInstance"> <tr class="${(i % 2) == 0 ? 'even' : 'odd'}"> <td>
- a partir de aquí modificamos este td y quedaría de la siguiente manera
<g:link action="show" id="${imagenInstance.id}">${fieldValue(bean: imagenInstance, field: "id")}
<img width="20%" height="20%" alt="Img" src="http://localhost:8080/ImgsGrailsApp/imagen/showImage/${imagenInstance.id}">
</g:link>
5.2
abrimos el archivo:
ImgsGrailsApp\grails-app\views\imagen\show.gspen este archivo esta lo que se va a mostrar cuando se vea una de imágen
-vamos a la linea donde esta
<ol class="property-list imagen">
<g:if test="${imagenInstance?.screenshot}">
<li class="fieldcontain">
<span id="screenshot-label" class="property-label"><g:message code="imagen.screenshot.label" default="Screenshot" /></span>
<ol class="property-list imagen">
<g:if test="${imagenInstance?.screenshot}">
<li class="fieldcontain">
<span id="screenshot-label" class="property-label"><g:message code="imagen.screenshot.label" default="Screenshot" /></span>
-a partir de aqui añadimos el siguiente código, quedaría antes de cerrar el li
<g:link action="showImage" id="${imagenInstance.id}">${fieldValue(bean: imagenInstance, field: "id")}
<img alt="img" src="http://localhost:8080/ImgsGrailsApp/imagen/showImage/${imagenInstance.id}">
</g:link>
6
probamos la aplicación: escribimos el comando:
grails run-app
Guía de Referencia GRAILS
Bienvenidos a GrailsFacilito
Navegando por la red me encontre con esté sitio interesante sobre Grails.
Descripción:
Documentación de Referencias del Framework Grails
Básicamente tiene desde como instar, comandos basicos, medios y avanzados de controladores, clases de dominio, plugins, servicios, etc.
Suscribirse a:
Entradas (Atom)