Pequeños éxitos con Grails

Un dicho dice "una de cal y otra de arena" para referirse a que unas veces las cosas van bien o son buenas y otras van mal o son malas. Quería llamar al post "una de cal con Grails" o "una de arena con grails", pero como nunca he sabido si la de cal es buena o mala, ni tampoco la de arena, así que he tenido que poner un título más directo.

El caso es que llevo quejándome de Grails un par de posts, pero ayer conseguí hacer funcionar un par de cosas (aunque no he avanzado en absoluto en mi proyecto) y creo justo compartir también las cosas buenas.

Por un lado, Daniel Latorre me dio la solución para el tema de los gráficos con j2d en un comentario del post anterior. La verdad es que la solución es sencilla. Si el método renderImage() desde una action del controller se empeña en enviar su contenido completo al navegador, basta con crear un enlace en otra página, que no tenga nada que ver con esa action, hacia la action que genera la imagen. Por ejemplo, si el controller en GraficosController y la action es generaEstadisticas(), entonces bastaría con poner en una página gsp cualquiera (que no sea generaEstadisticas.gsp)

<img src=”${createLink(controller:’graficos’,action:’generaEstadisticas’)}”/>

En cuanto al tema de logging que tampoco conseguí hacer funcionar en un par de intentos rápidos. Ya está funcionando. ¿Cual era el problema?, Pues en la documentación pone que en el fichero grails-app/conf/Config.groovy hay que poner esto

Logs are named using the convention grails.app.<artefactType>.ClassName. Below is an example of how to configure logs for different Grails artefacts:

log4j = {
   debug "grails.app.controller.YourController"
}

 Así que como mi clase se llama ColumnaController, probé con 

debug "grails.app.controller.ColumnaController"

y no funcionaba. Empezando a intuir que grails es un poco raro con los nombres de los controladores y que a veces no hay que poner la palabra Controller e incluso poner el nombre con minúscula aunque esté en mayúsculas en la clase (ver el parámetro controller del ejemplo anterior del enlace al gráfico j2d), pues probé varias variantes, sin palabra Controller, con mayúscula o minúscula … y ninguna funcionó.

¿Cual es el truco entonces?. Pues es simple, en mi caso ColumnaController pertenece al paquete com.chuidiang.kanban, y también hay que poner el nombre del paquete

debug "grails.app.controller.com.chuidiang.kanban.ColumnaController"

En fin, una pequeña confusión, quizás culpa mía por no ser estricto y saber que ClassName incluye el nombre del paquete, quizás por estar acostumbrado en Java a poner paquete a toda clase que se menea, o quizás habría ayudado si la documentación hubiese puesto

debug "grails.app.controller.YourPackage.YourController"

Supongo que en grails también deben tener que ponerse paquetes a las clases, sobre todo si el proyecto tiene una cierta envergadura, ya que es imprescindible hacer paquetes para separar temas.

Entradas relacionadas:

Esta entrada ha sido publicada en grails y etiquetada como , , . Guarda el enlace permanente.

1 respuesta a Pequeños éxitos con Grails

  1. Pingback: de la red – 22/03/2010 « Tecnologías y su contexto

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.