¿Cómo redactar mensajes de validación de Grails?

Tengo una entidad de dominio simple:

package shoesshop

class Brand {

    String name
    String description
    String logoImageURL

    static constraints = {
        name(blank: false)
        logoImageURL(nullable: true)
    }
}

Cuando trato de guardar una nueva marca con un valor nulo como su nombre, quiero mostrar un mensaje que dice "Se debe especificar el nombre".

Intenté agregar una propiedad a messages.properties:

brand.name.nullable=Brand name must be specified  

Pero no se recoge automáticamente. ¿Cómo debo recuperarlo desde allí? Miré brand.errors y contiene solo un mensaje predeterminado

Property [{0}] of class [{1}] cannot be null.

También contiene un conjunto de códigos de error, uno de los cuales es brand.name.nullable.

preguntado el 22 de mayo de 12 a las 16:05

3 Respuestas

¿Has probado?:

if(brand.name==null)
{
    flash.message = message(code: 'brand.name.nullable',default:'Brand name must be specified.');
    render(view: "create", model: [brand:brand])
    return
}

Puede intentar cambiar el mensaje (no sé cómo funcionará esto con toda su aplicación) de "default.null.message" a

{1} {0} must be specified

contestado el 22 de mayo de 12 a las 20:05

Es extraño para mí que el mensaje de error anulable aparezca cuando no tiene la restricción anulable. En el documentos para blanco y anulable muestra claramente que nullable es diferente a blank y tienen mensajes separados.

Trata

brand.name.blank

También parece que tengo que agregar el .error para que las cosas funcionen correctamente:

brand.name.blank.error or brand.name.nullable.error

contestado el 23 de mayo de 12 a las 06:05

es porque cuando el usuario envía desde la web, "nombre" sería una cadena en blanco en lugar de nulo. - Hoang Long

Eso es lo que digo: no recibe el mensaje de error en blanco como debería cuando el usuario envía con un campo en blanco. Está recibiendo el mensaje anulable. - Kelly

Estoy usando Grails 2.2.3. Para mí funciona cuando estoy usando

brands.name.blank=The name cannot be empty

Ahora, si actualizo la página ".../appname/controllername/save" después de recibir este error, obtengo

Property [name] of class [class ...] cannot be null

Este mensaje se puede cambiar con

brands.name.nullable=The name cannot be null (do not refresh the page!!!)

Respondido 14 Jul 13, 20:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.