validate - ¿Cómo creo un validador personalizado con un mensaje de error personalizado en Grails?
grails command object custom validator (2)
Paso 1: crea un objeto de dominio o un objeto de comando y pon restricciones personalizadas en él, como tal ...
@grails.validation.Validateable
class PeopleCommand {
String firstName
String lastName
String emailAddress
String idNumber
static constraints = {
firstName (blank: false)
lastName (blank: false)
emailAddress (blank: false)
idNumber (blank: false, size: 13..16, validator: {value, object ->
if (!value.startsWith(''77'')) return false;
})
}
}
Esto verificará si el IDNumber ingresado comienza con 77. Si no lo hace, enviará un error. La siguiente pregunta, ¿cómo mostramos el error?
Paso 2: personaliza la vista para mostrar tu error
<div class="${hasErrors(bean:person,field:''idNumber'',''error'')}">
<label class="control-label">Identity Number</label>
<input value="${fieldValue(bean:person,field:''idNumber'')}" name="idNumber" type="text"/>
<div class="error-messages">
<g:renderErrors bean="${command}" as="list" field="idNumber"/>
</div>
</div>
En el ejemplo anterior, ${hasErrors(bean:person,field:''idNumber'',''error'')}
agregará el error
cadena a la clase html si el campo idNumber del objeto del modelo de persona tiene un error. Esta clase se puede usar para aplicar estilo a la entrada y mostrar u ocultar el bloque div.error-messages
. El <g:renderErrors bean="${command}" as="list" field="idNumber"/>
mostrará un horrible mensaje de error.
Paso 3: crea un mensaje personalizado atractivo
IMPORTANTE : Grails no le permite enviar un mensaje directamente a la vista. En su lugar, debe declarar el mensaje en /i18n/messages.properties (paquetes de mensajes). Puedes usar cualquier tecla que desees.
En messages.properties
validation.idStartsWith77=Your ID number must start with 77
En el validador
idNumber (blank: false, size: 13..16, validator: {value, object ->
return ''validation.idStartsWith77''
})
Esto ahora pasa una referencia a la vista, apuntando a su mensaje personalizado en messages.properties ...
Paso 4: piratear el sistema para permitir pasar un mensaje directamente a la vista
Esto solo se aplica a las personas que específicamente no están desarrollando un sitio web en varios idiomas.
Grails le permite pasar parámetros personalizados al analizador. Puede consultar estos parámetros personalizados en su archivo de mensajes. Para engañar al sistema, podemos crear un mensaje personalizado, donde todo el mensaje es un parámetro personalizado. Como tal:
En messages.properties
validation.customRuntimeMessage={3}
En el validador
idNumber (blank: false, size: 13..16, validator: {value, object ->
return [''validation.customRuntimeMessage'', ''You need to start your ID with 77'']
})
¿Cómo creo un validador personalizado en grillas y hago que pase una cadena personalizada a la vista y un mensaje de error?
Vi a tantas personas atrapadas en el mismo porfavor, decidí crear una pregunta y una respuesta para enfrentarlo.
La alternativa para tener validación personalizada es crear una restricción personalizada y cablearla con Grails.
http://www.zorched.net/2008/01/25/build-a-custom-validator-in-grails-with-a-plugin/