понедельник, 12 апреля 2010 г.

Wicket - Специфика работы с валидаторами полей и ошибками

Задача. Обеспечить проверку данных, вводимых в форму, а так же информирование об ошибках ввода.

Информирование об ошибках.
Чтобы ошибки отображались в форме, нужно добавить FeedBackPanel как в шаблон, так и в класс страницы.


Обязательные поля
Если поле является обязательным, то можно выделить его с помощью "красной звездочки", но выделение это выглядит не очень красиво.Для этого используется FormComponentFeedbackBorder. Ниже пример использования


Можно вместо звездочки сделать свою разметку.

Валидаторы.
Базовые валидаторы Wicket достаточно скудные. Мне в конкретной задаче понадобился валидатор, который проверяет, что поле содержит ровно 12 цифр. Оказалось, что для этого нужно писать собственный валидатор. Ниже я привожу сам валидатор, класс страницы.

Остановимся чуть подробнее на этом классе. Конструктор принимает имя поля, на которое навешивается валидатор и размер этого поля. Метод непосредственно осуществляющий проверку не представляет особого интереса, в нем вызывается метод error, записывающий ошибку в feedbackpanel данной формы. Тут нужно заметить, что если Вы забыли добавить компонент FeedBackPanel в форму, то ошибку Вы не увидите, хотя валидатор отработает и не допустит некорректного ввода в форму. Метод resourceKey возвращает префикс, с которого начинается локализованное сообщение об ошибке, хранящееся в properties - файле страницы.

Ну и последний метод предоставлет значения для замены placeholder'ов в сообщении об ошибке. Теперь остается подключить валидатор к полю:


Те кто имеют опыт работы с Tapestry оценят насколько Wicket отстает в развити от данной технологии. Для Tapestry такие валидаторы писать просто нет нужды, все уже сделано за нас.Сравнение этих технологий я проведу позднее. А пока про валидаторы все.

1 комментарий:

  1. А как на счет StringValidator.lengthBetween( minimum, maximum) для длины строки или RangeValidator(minimum, maximum) для диапазона значений?

    ОтветитьУдалить