Ago 12 09

Grails 1.2. M2 Released

by Fátima Casaú Pérez

La versión de #Grails 1.2. M2 ya está fuera. Podemos encontrar sus “released notes” y “new features” en http://www.grails.org/1.2-M2+Release+Notes y podemos descargarlo en: http://www.grails.org/Download

Destacar que es la primera release que integra la última versión de Spring 3 soucecode y que además podemos utilizar etiquetas de Spring del tipo @Service, @Component, @Controller. De esta forma con @Component podemos convertir una clase en un bean de Spring e inyectarlo en otras clases, o con @Controller podemos convertir un controller en un Spring MVC Controller y conbinar Spring MVC con Grails.

Todavía no lo he probado así que habrá que ponerse a ello

Ago 11 09

#Grails – gui:dataTable con imágenes

by Fátima Casaú Pérez

Tenemos un proyecto grails, en el que estamos utilizando, como no, los plugins yui y grails-ui. Nos disponemos a implementar las típicas pantallas de administración en las que se gestionan recursos de una aplicación de forma que se dan de alta, de baja, se modifican, se insertan, se borran… A la hora de mostrar los listados, una manera fácil y rápida de hacerlo es utilizando las gui:dataTables con las que con sólo una closure de un controller y una gsp muy sencilla, tenemos un listado paginado de los objetos de una clase del dominio. Por ejemplo:

Clase del dominio:

</code></code>

class Person {

String name

Integer age

String state

static constraints = {

}

Controlador:

</span></span>

<span style="font-family: -webkit-monospace"> </span>def listPersonsAsJSON = {
def personList = Person.list(params)
response.setHeader("Cache-Control", "no-store")
def list = personList.collect {
[
id: it.id,
name: it.name,
age: it.age,
state: it.state,
dataUrl: g.createLink(action: 'show') + "/$it.id"
]
}
def data = [
totalRecords: Person.count(),
results: list
]
render data as JSON
}

gsp:

<gui:dataTable</code></code>

draggableColumns="true"

id="listPersons"

columnDefs="[

[key:'id', sortable:true, resizeable: true, label:'ID'],

[key:'name', sortable:true, resizeable: true, label:'NAME'],

[key:'age', sortable:true, resizeable: true, label: 'AGE'],

[key:'state', sortable:true, resizeable: true, label: 'STATE']

]"

sortedBy="name"

controller="person" action="listPersonsAsJSON"

paginate="true"

rowClickNavigation="true"

rowsPerPage="5"

/>

Y este es el resultado:

dataTabale sin imágenes

... pero la forma de mostrar el estado... es un poco cutre, quedaría mejor con una imagen que refleje el estado.

El problema es que si intentamos buscar como insertar una imagen en un gui:dataTable, casi no encontramos nada, más bien, parece que no se puede hacer y cuando en un principio pensaba que tenía que recurrir a lo que hay por debajo, es decir, yui:dataTable, probé lo más tonto: poner en la lista que me defino en el contralador, en lugar del valor del estado, un tag <img> con la url de la imagen que quiero mostrar en función del estado que me venga:

def list = personList.collect {
def state=""
if(it.state=="Y"){

state="img src='${createLinkTo(dir:'images',file:'accept.png')}'/"

}else{

state="img src='${createLinkTo(dir:'images',file:'delete.png')}'/"

}

[
id: it.id,
name: it.name,
age: it.age,
state:state,

dataUrl: g.createLink(action: 'show') + "/$it.id"

]

}
Y lo que en un principio parecía una tontería que no iba a funcionar ...
pues aquí está:
dataTable-con-imagenesfacilísimo
Ago 11 09

Mi blog y Twitter

by Fátima Casaú Pérez

Poco a poco mis entradas de blog irán apareciendo en twitter o eso espero.

Jul 28 09

Nuevo diseño de grails.org

by Fátima Casaú Pérez

Tenemos nuevo diseño de la página de Grails.

El contenido aparentemente es el mismo, pero tiene un diseño más vistoso e intuitivo. La parte de búsqueda de plugins está bastante mejor y más accesible donde podemos encontrar los plugins clasificados por categorías (destacados, más populares, nuevos, últimos modificados, …) así como la posibilidad de buscar un plugin por texto. En esta pantalla también encontraremos accesos directos a:

Para comprobar todo esto hay que acceder a la página y echarle un vistazo

Jul 20 09

Introducción a GRAILS

by Fátima Casaú Pérez

Grails es un framework de código abierto intuitivo y fácil de usar, para el desarrollo de aplicaciones web que llega como una revolución en este campo. Sigue los principios “don’t repeat yourself” o “DRY” y “convention over configuration” o “CoC“, es decir, evitar la repeticion de fragmentos de código para evitar inconsistencias y favorecer la claridad, así como, reducir todo lo posible los aspectos configurables de una aplicación.

Está desarrollado sobre el lenguaje Groovy, el cual, a su vez, está basado en la plataforma Java ofreciéndonos una modelo de capas MVC , además de ofrecernos otras capas como una capa de persistencia y una  capa de servicos. Otras ventajas:

  • Es un productivo framework para la Java Platform.
  • Proporciona la reutilizacion de tecnologías java como Hibernate o Spring en una simple y consistente interfaz
  • Proporciona un completo modo de desarrollo que incluye el servidor web y además, no hace falta volver a ejecutar la aplicacion para recargar sus recursos, según se van haciendo cambios.
  • Además, se pueden incluir numerosos plugins que complementan todo esto. Algunos de ellos son : Grails-ui, yui, bubbling, acegi, jasper-report … Además, al ser de código abierto, podemos crear nuestros propios plugins y publicarlos.

Tenemos varias vías a través de las cuales podemos interactuar con otros usuarios de grails para enviar “feedbacks”, dudas, problemas, errores en el código … Como ejemplos tenemos:

  • Lista de correo de grails: http://www.grails.org/Mailing+lists
  • Jira: http://jira.codehaus.org/browse/GRAILS . Más adelante hablaremos de Jira. Como resumen, comentar que es es una aplicación diseñada para mejorar el proceso de dar seguimiento a los defectos y errores, es decir mantener la trazabilidad de la información, así como administrar y manejar proyectos no solo de desarrollo de software sino de cualquier tipo de situacines que maneje la organización. En concreto en Grails podemos crear “issues” con los errores que encontremos sobre grails o cualquiera de sus plugins para que así vayan solucinándose en posteriores versiones. Debido a esto, y a que Grails es relativamente reciente, tanto las versiones de Grails como las de sus plugins cambian con frecuencia.  Además, se liberan versiones no definitivas (SNAPSHOT) para que los usuarios puedan probarlas  y reportar errores.

Dos paginas muy útiles y que tenemos que tener muy presentes a la hora de programar aplicaciones en grails son:

En resumen, este framework facilita de una forma clara, sencilla e intuitiva, el desarrollo de aplicaciones. Y por último decir que Grails es “cool” e “impresionante” ;-)

Espero que el post sea de interes y posteriores entradas iré comentando con ejemplos como crear aplicaciones, utilizar plugins, así como los problemas que me surjan en mi trabajo diario y como salgo, satisfactioriamente o no, de ellos.