2012-06-08 12 views
16

Die Grails 2.0.4 documentation zur Validierung zeigt Ihnen, wie Sie Fehlermeldungen oben auf der Seite anzeigen und wie Sie einem Element eine css-Klasse hinzufügen, wenn ein Feld ungültig ist, aber nicht, wie Sie die Fehlermeldung neben anzeigen die Felder selbst, etwa so:In Grails, wie zeige ich Validierungsfehlermeldungen neben den Feldern an?

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

Wie rufen Sie die spezifische Fehlermeldung für ein ungültiges Feld und dann auf das Feld neben anzeigen für es ist?

+0

Es ist alles im HTML Ihrer Ansicht. Sehen Sie sich die Scaffold-Vorlagen an, um das Standard-Rendering zu sehen. Sie können sie ändern, um die Feldfehler anzuzeigen, wo immer Sie möchten. Das in den Antworten erwähnte fields plugin macht das schon. – aldrin

+0

Ich habe eine detaillierte Antwort zum Erstellen einer benutzerdefinierten Validierung erstellt und eine benutzerdefinierte Fehlermeldung zurück zu Ihrer Ansicht hier: http://stackoverflow.com/questions/14038905/how-do-i-create-a-custom -validator-with-a-custom-error-message-in-grails/14038908 # 14038908 – Spider

Antwort

11

Eigentlich ist die Dokumentation zeigen, wie dies zu tun, es ist einfach nicht allzu klar, dass das ist, was sie bedeuten:

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

Wenn Sie das Feld Attribut angeben, wird es nur Fehler machen (s) für dieses Feld. Also liegt es an Ihnen, den HTML-Code entsprechend zu schreiben.

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

Es kann so einfach oder so kompliziert, wie Sie es möchten und während ich Grails Plugins im Allgemeinen mag, dies scheint nur einfach genug, ohne eine zu tun und Sie mehr Kontrolle über das Markup haben.

+0

Danke Gregg. Das ist, was ich gesucht habe. –

+0

Was passiert, wenn das Feld nicht mit einer Bohne verknüpft ist? Angenommen, Sie erstellen ein gsp mit nur einem Feld, um nach einer Entität zu suchen ... Wie zeige ich dort einen Fehler an? – FrancescoDS

7

Ich benutze die Grails Fields plugin, um dies zu tun, und es funktioniert ein Vergnügen.

Es erleichtert das Erstellen von Standardvorlagen für das Formularfeld-Rendering. Zum Beispiel habe ich im Anschluss an den in 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> 

Wie Sie aus dem HTML sehen die Fehler inline angezeigt werden. Hier ist ein Teil meiner Login-Formular:

<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

Ausgezeichnet! Werde das Feld-Plugin sicher ausprobieren. – Kimi

1

ich empfehlen würde mit Jquery validation plugin gehen. Es gibt mehrere Grails-Plugins, aber sie sind etwas veraltet. Außerdem denke ich, dass diese Aufgabe für die Verwendung eines anderen Plugins ziemlich einfach ist.

4

Hier ist der benutzerdefinierte Fehler im Kontext, um Benutzername Feld gewickelt. Dies wird tun, was Sie wollen.

<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> 
Verwandte Themen