Как создать настраиваемый валидатор с настраиваемым сообщением об ошибке в Grails? - программирование
Подтвердить что ты не робот

Как создать настраиваемый валидатор с настраиваемым сообщением об ошибке в Grails?

Как создать пользовательский валидатор в grails и заставить его передать пользовательскую строку обратно в представление и сообщение об ошибке?

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

4b9b3361

Ответ 1

Шаг 1: Создайте объект Object или Command Object и поместите на него пользовательские ограничения, как таковые...

@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;
        })
    }
}

Это проверит, будет ли введенный idNumber с 77. Если это не так, оно отправит сообщение об ошибке. Следующий вопрос, как мы отображаем ошибку?

Шаг 2. Настройте представление для отображения вашей ошибки

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

В приведенном выше примере ${hasErrors(bean:person,field:'idNumber','error')} добавит строку error в класс html, если поле идентификатора объекта модели человека имеет ошибку. Этот класс можно использовать для стилизации ввода и отображения и/или скрытия блока div.error-messages. <g:renderErrors bean="${command}" as="list" field="idNumber"/> отобразит ужасное сообщение об ошибке.

Шаг 3. Создание сексуального пользовательского сообщения

ВАЖНО: Grails не позволяет отправлять сообщение непосредственно на Посмотреть. Вместо этого вы должны объявить сообщение в /i 18n/messages.properties(Связи писем). Вы можете использовать любую имеющуюся клавишу.

В свойствах messages.properties

validation.idStartsWith77=Your ID number must start with 77

В валидаторе

idNumber  (blank: false, size: 13..16, validator: {value, object ->
    return 'validation.idStartsWith77'
})

Теперь он передает ссылку на представление, указывая на ваше пользовательское сообщение в messages.properties...

Шаг 4: взломать систему, чтобы разрешить передачу сообщения непосредственно в представление

Это относится только к людям, которые специально не разрабатывают многоязычный веб-сайт.

Grails позволяет передавать пользовательские параметры в парсер. Вы можете обратиться к этим пользовательским параметрам в файл сообщений. Чтобы обмануть систему, мы можем создать настраиваемое сообщение, где все сообщение является одним настраиваемым параметром. Таким образом:

В свойствах messages.properties

validation.customRuntimeMessage={3}

В валидаторе

idNumber  (blank: false, size: 13..16, validator: {value, object ->
    return ['validation.customRuntimeMessage', 'You need to start your ID with 77']
})