2012-06-08 30 views
16

El Grails 2.0.4 documentation para la validación muestra cómo mostrar los mensajes de error en la parte superior de la página y cómo agregar una clase css a un elemento si el campo no es válido, pero no indica cómo mostrar el mensaje de error junto a los campos propios, algo como esto:En Grails, ¿cómo se muestran los mensajes de error de validación junto a los campos?

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

¿cómo puede recuperar el mensaje de error específico para un campo no válido y después mostrarlo junto al campo que es para?

+0

Todo está en el código HTML de su vista. Echa un vistazo a las plantillas de andamios para ver la representación predeterminada. Puede modificarlos para mostrar los errores de campo donde lo desee. El complemento de campos mencionado en las respuestas ya lo hace. – aldrin

+0

He creado una respuesta detallada sobre cómo crear una validación personalizada y enviar un mensaje de error personalizado a su vista aquí: http://stackoverflow.com/questions/14038905/how-do-i-create-a-custom -validator-with-a-custom-error-message-in-grails/14038908 # 14038908 – Spider

Respuesta

11

En realidad, la documentación sí muestra cómo hacer esto, simplemente no es excesivamente claro que esto es lo que quieren decir:

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

Si especifica el campo atributo, sólo hará que el error (s) para ese campo. Entonces, depende de ti escribir el HTML en consecuencia.

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

Se puede conseguir tan simple o tan complicado como usted lo quisiera y si bien por lo general gusta Grails plugins, esto sólo parece bastante simple de hacer sin uno y tiene más control sobre el margen de beneficio.

+0

Gracias Gregg. Esto es lo que estaba buscando. –

+0

¿Qué sucede si el campo no está vinculado a un bean? Supongamos que crea un gsp con solo un campo para buscar sobre alguna entidad ... ¿cómo puedo mostrar el error allí? – FrancescoDS

7

Uso el Grails Fields plugin para hacer esto, y funciona de maravilla.

Hace que sea fácil crear plantillas predeterminadas para la representación del campo de formulario. Por ejemplo, he 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 código HTML los errores se muestran en línea. Aquí es parte de mi forma de entrada:

<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> 
+0

¡Excelente! Probablemente probará el plugin de campos. – Kimi

1

recomendaría ir con Jquery validation plugin. 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.

4

Aquí está el error personalizado en el 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> 
Cuestiones relacionadas