validation grails grails-2.0

validation - En Grails, ¿cómo muestro los mensajes de error de validación al lado de los campos?



grails-2.0 (4)

Aquí está el error personalizado en contexto, envuelto alrededor del campo de nombre de usuario. Esto hará lo que quieras.

<dt>User Id</dt> <dd><g:textField name="username" value="${user?.username}"/> <g:hasErrors bean="${user}" field="username"> <g:eachError bean="${user}" field="username"> <p style="color: red;"><g:message error="${it}"/></p> </g:eachError> </g:hasErrors> </dd>

La documentación de validación de Grails 2.0.4 le muestra cómo mostrar mensajes de error en la parte superior de la página y cómo agregar una clase css a un elemento si un campo no es válido, pero no le dice cómo mostrar el mensaje de error Junto a los campos mismos, algo como esto:

----------------------- Name: | | You must enter a name! -----------------------

¿Cómo recupera el mensaje de error específico para un campo no válido y luego lo muestra al lado del campo para el que es?


En realidad, la documentación muestra cómo hacer esto, simplemente no está demasiado claro que esto es lo que quieren decir:

<g:renderErrors bean="${book}" as="list" field="title"/>

Si especifica el atributo de campo , solo generará errores para ese campo. Entonces solo depende de usted escribir el HTML en consecuencia.

<input type="text" ... /> <g:if test="${bean.hasErrors}"><g:renderErrors bean="${book}" as="list" field="title"/></g:if>

Puede ser tan simple o tan complicado como a usted le gustaría, y aunque generalmente me gustan los complementos de Grails, esto parece ser lo suficientemente simple sin uno y usted tiene más control sobre el marcado.


Utilizo el plugin Grails Fields para hacer esto, y funciona muy bien.

Facilita la creación de plantillas predeterminadas para la representación de campos de formulario. Por ejemplo, tengo lo siguiente en grails-app/views/_fields/default/_field.gsp :

<%@ page defaultCodec="html" %> <div class="control-group${invalid ? '' error'' : ''''}"> <label class="control-label" for="${property}${index ?: ""}">${label}</label> <div class="controls"> <%= widget.replace("id=/"${property}/"", "id=/"${property}${index ?: ""}/"") %> <g:if test="${invalid}"><span class="help-inline">${errors.join(''<br>'')}</span></g:if> </div> </div>

Como se puede ver en el HTML, los errores se muestran en línea. Aquí es parte de mi formulario de inicio de sesión:

<g:form controller="home" action="login" > <f:field bean="user" property="email"/> <f:field bean="user" property="password"> <g:field type="password" name="${property}" value="${value}"/> </f:field> </g:form>


Yo recomendaría ir con el plugin de validación Jquery . Hay varios plugins de Grails sobre esto, pero están un poco desactualizados. Además, creo que esta tarea es bastante simple para usar otro complemento.