В Grails, как мне отображать сообщения об ошибках проверки рядом с полями? - программирование
Подтвердить что ты не робот

В Grails, как мне отображать сообщения об ошибках проверки рядом с полями?

Документация Grails 2.0.4 для проверки показывает, как отображать сообщения об ошибках в верхней части страницы и как добавить класс css к элементу, если поле недействительно, но оно не говорит вам, как отображать сообщение об ошибке рядом с самими полями, примерно так:

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

Как получить конкретное сообщение об ошибке для недопустимого поля, а затем отобразить его рядом с полем для?

4b9b3361

Ответ 1

Собственно, документация показывает, как это сделать, просто не слишком ясно, что это то, что они означают:

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

Если вы укажете атрибут поля, он будет отображать только ошибки для этого поля. Итак, вам просто нужно написать HTML.

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

Он может быть таким же простым или сложным, как вам бы это хотелось, и хотя я вообще люблю плагины Grails, это просто кажется достаточно простым, чтобы обойтись без него, и у вас больше контроля над разметкой.

Ответ 2

Я использую плагин Grails Fields для этого, и это работает.

Это упрощает создание шаблонов по умолчанию для рендеринга полей формы. Например, в 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>

Как видно из HTML, ошибки отображаются в строке. Вот часть моей формы входа:

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

Ответ 3

Вот пользовательская ошибка в контексте, обернутая вокруг поля имени пользователя. Это сделает то, что вы хотите.

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

Ответ 4

Я бы рекомендовал перейти с плагин проверки JQuery. Там есть несколько плагинов Grails, но они немного устарели. Кроме того, я думаю, что эта задача довольно проста для использования другого плагина.