Валидации
Валидации позволяют проверить корректность входных данных для выполнения операций над объектом и виджетом.
Валидация объекта
Валидация объекта позволяет задать единые правила корректности входных данных для любых операций и выборок.
Все валидации объекта перечисляются в элементе <validations>
:
<object>
<validations>
... <!-- Валидации объекта -->
</validations>
</object>
Способы валидаций
Существует два основных способа валидаций:
- Проверка входных данных по условиям
- Проверка целостности данных на уровне БД
Проверка входных данных по условиям
По условиям можно проверить корректность значения поля, его взаимосвязи с другими полями.
Проверка по условию записывается в элементе <condition>
:
<validations>
<condition id="checkAdult"
message="Запрещено для детей. Ваш возраст {age}, что меньше 18."
field-id="age">age >= 18</condition>
</validations>
Атрибут id
задаёт идентификатор валидации в объекте.
В дальнейшем, через id
на валидацию можно будет сослаться в тех местах,
где она должна сработать.
В теле элемента <condition>
задается условие на языке javaScript.
Атрибутом field-id
можно задать поле, под которым появится сообщение валидации.
Если условие будет верным (вернёт true
), то валидация пройдёт успешно.
Если же будет неверным (вернёт false
), то появится сообщение message
.
В сообщении можно использовать ссылки на поля входных данных. Ссылки записываются в фигурных скобках.
Проверка целостности данных на уровне БД
Чтобы проверить целостность данных, необходимо сделать запрос к источнику данных с помощью провайдеров.
Проверка целостности данных задаётся в элементе <constraint>
:
<validations>
<constraint id="checkUniqueName"
message="Пользователь с таким именем уже существует в системе"
server-moment="before-operation" severity="danger"
result="[0].get('CNT') == 0">
<invocation>
<sql>
SELECT count(1) as cnt
FROM user
WHERE username = :username
</sql>
</invocation>
<in>
<field id="username"/>
</in>
</constraint>
</validations>
Обращение к провайдеру данных задаётся в элементе <invocation>
.
В элементе <in>
задаются входные параметры провайдера.
Одновременно, эти параметры являются триггерами срабатывания валидации.
В элементе <out>
задаются выходные параметры провайдера.
На них можно ссылаться в сообщении валидации.
В атрибуте result
задаётся условие проверки результата.
Условие записывается на языке SpEL.
Если условие будет верным (вернёт true
), то валидация пройдёт успешно.
Если же будет неверным (вернёт false
), то появится сообщение message
.
Проверка обязательности заполнения
Чтобы проверить обязательность заполнения поля,
можно поставить атрибут required="true"
для входящего параметра операции:
<operation>
<in>
<field id="name" required="true"/>
</in>
</operation>
В этом случае для поля выполняется стандартная проверка заполненности и выводится сообщение.
Если требуется вывести нестандартное сообщение, можно создать специальную валидацию <mandatory>
:
<validations>
<mandatory id="requiredName"
field-id="name"
message="Имя должно быть заполнено"/>
</validations>