lunes, 30 de noviembre de 2009

Errores en gsp, la línea del error no corresponde

Algunas veces, nos sale un error como este:

java.Lang.NullPointerException
...
...(mi_plantilla_gsp:23)

->Donde  23, se supone, debería ser la línea donde se se ha generado el error.  Pero resulta que cuando vemos el archivo gsp, en dicha línea no hay nada que pueda generar un error!!!

Lo que ocurre es que grails nos muestra la línea en donde se presenta el error, después de compilar la plantilla.

Una posible solución (solo funciona en entorno de desarrollo, no funciona en entorno de producción) es pasar el parámetro showCode en la URL, así no se mostrará la gsp procesada como html, sino que podrá verse el código fuente de compilación de la plantilla.

Ejemplo:

Si la URL es así:

localhost:8080/nombreAplicacion/nombreController/nombreAction

añada ?showSource al fina, así:

localhost:8080/nombreAplicacion/nombreController/nombreAction?showSource=true

Pd. Si no salen los números de cada línea, puedes copiar todo el texto y pegarlo en tu editor favorito, para ver la línea que deseas.


Happy Grails ;)

martes, 13 de octubre de 2009

Personalizar el valor optionValue de un tag g:select

Cuando utilizamos un tag como

podemos usar un atributo optionKey y un atributo optionValue.

El atributo optionValue lo utilizamos para decidir qué campo es el que deseamos mostrar, por ejemplo:


Pero ¿Qué pasa si deseamos que en la lista de select, sea visible más de un atributo, o si deseamos procesar los valores antes de mostrarlos?

Una solución, puede ser la siguiente:



En el ejemplo anterior, ponemos el atributo nombre en mayúsculas, y le agregamos a la cadena, el atributo 'autor'. Nótese que se utiliza doble llave ${{}}

Happy Grails ;)

jueves, 24 de septiembre de 2009

Uso alternativo al método estático findAllBy, para filtrar por más de dos criterios

El método estático findAllBy de grails, solo permite hacer consultas teniendo en cuenta máximo dos valores, así:

def listaDeObjetos = Clase.findAllByPropiedad1AndPropiedad2("valor1","valor2")

Si se quiere hacer un filtrado por más de dos propiedades, puede hacerse utilizando el método findAllWhere, así:

def listaObjetos = Clase.findAllWhere(['propiedad1':'valor1', 'propiedad2':'valor2', 'propiedad3':OtraClase.get('valor3'), 'propiedad4':'valor4'])

miércoles, 23 de septiembre de 2009

Pasar parámetro update de una remoteFunction vía Javascript

Si se tiene una función de javascript así:

function nombreFuncion(algunId){
${remoteFunction(action:'action',controller:'controller',update:"div_'+algunId+'")}
}


Donde div_[algunId] es el id del html div que se desea actualizar al finalizar la petición.

Recuerde usar las comillas así:

update:"div_'+algunId+'"

lunes, 7 de septiembre de 2009

Ordenar un arreglo de arreglos, o de objetos

Si se tiene una clase

Usuario:
+id
+nombre
+nick

Y luego, se tiene un arreglo de objetos [Usuario] 'usuarios'

Este arreglo, puede ordenarse así:

usuarios = usuarios.sort{ it.nombre }

Si se trata de un arreglo de arreglos, puede ordenarse así:

listaArreglos = listaArreglos.sort{ it[0] }


domingo, 31 de mayo de 2009

nl2br en grails

PHP cuenta con una función para convertir saltos de línea "/n" de una cadena en etiquetas <br> html

Grails no cuenta con una función similar para formatear estas cadenas, que se almacenan desde un simple textArea pero deseamos que mantengan su "formato" al mostrarlas nuevamente.

Una sencilla solución en grails puede ser la siguiente:

1. Crear nuestor propio codificador
2. Llamarlo directamente desde la .gsp

Para crear un codificador, basta con crear en la carpeta grails-app/utils/ una clase así:

NL2BRCodec.groovy (Es importante que el nombre del archivo tenga el sufijo 'Codec')

class NL2BRCodec{
static encode = { string ->
string.trim().replaceAll("\n","<br>")
}
}

Y eso es todo, ahora desde la gsp, lo único que tenemos que hacer es llamar el nuevo codificador así:

<g:encodeAs codec="NL2BR">${objeto.valor}</g:encodeAs>

O así:

${objeto.valor.encodeAsNL2BR()}

nl2br in grails, english version

PHP has one function that converts String's breaklines "/n" into <br> html tags.

Grails doesn't have a similar function to format Strings this way, but we can make our own Grail's codec, in order to obtain the same result as in PHP:

1. Create your own codec
2. Call it directly from the GSP page

1. To create the new codec, you just need to create a Grail's class in the folder grails-app/utils/ , like this:

NL2BRCodec.groovy (The file has to be named with the 'Codec' sufix)

class NL2BRCodec{
static encode = { string ->
string.trim().replaceAll("\n","<br>")
}
}

That's all, now, from the GSP page, you just have to call the codec like this:

<g:encodeAs codec="NL2BR">${object.stringValue}</g:encodeAs>

Or:

${object.stringValue.encodeAsNL2BR()}