Создание валидаторов для полей ввода является стандартной задачей, с которой сталкиваются разработчики. В GXT процесс установки валидатора для текстового поля очень прост. В моем случае необходимо создать валидатор для текстового поля. Условия следующие.
В тестовое поле можно вводить только числа в формате xxx-xxx-xxxx или xxxxxxxxxx. Причем число введенное в формате xxxxxxxxxx должно после ввода автоматически преобразоваваться к виду xxx-xxx-xxxx. Напрмер, вводим 1234567890 убираем фокус и получаем, что в текстовом поле содержится 123-456-7890.
Для того чтобы добавить к текстовому полю валидатор нужно использовать метод setValidator(). В нем надо создать новый валидатор new Validator() и переопределить в этом валидаторе метод validate() который собственно и отвечает за проверку корректности ввода.
Ниже приведен исходный код создания валидатора.
Валидация после введения недопустимого значения.
В тестовое поле можно вводить только числа в формате xxx-xxx-xxxx или xxxxxxxxxx. Причем число введенное в формате xxxxxxxxxx должно после ввода автоматически преобразоваваться к виду xxx-xxx-xxxx. Напрмер, вводим 1234567890 убираем фокус и получаем, что в текстовом поле содержится 123-456-7890.
Для того чтобы добавить к текстовому полю валидатор нужно использовать метод setValidator(). В нем надо создать новый валидатор new Validator() и переопределить в этом валидаторе метод validate() который собственно и отвечает за проверку корректности ввода.
Ниже приведен исходный код создания валидатора.
// создаем текстовое поле final TextField<String> mainBTNField = new TextField<String>(); // устанавливаем валидатор для текстового поля mainBTNField.setValidator(new Validator() { // переопределяем метод validate @Override public String validate(final Field<?> field, final String value) { // Переменная res - это то сообщение, которое выведет валидатор // в случае неправильного ввода, если ввод правильный, то res // останется равным null и ничего не выведется String res = null; // проверяем соответствует ли введенно значение допустимым шаблонам // если не соответствует, то выводим предупреждение if ((!value.matches("[0-9]{3}[0-9]{3}[0-9]{4}")) && (!value.matches("[0-9]{3}-[0-9]{3}-[0-9]{4}"))) { return "Number must be in format xxx-xxx-xxxx or xxxxxxxxxx"; } else { // если введенное значение соотвествует шаблону xxx-xxx-xxxx // то устанавливаем его в поле ввода String str = value; if (str.matches("[0-9]{3}-[0-9]{3}-[0-9]{4}")) { mainBTNField.setRawValue(str); } // если введенное значение соответствует шаблону xxxxxxxxxx // то нам необходимо преобразовать его к виду xxx-xxx-xxxx if (str.matches("[0-9]{3}[0-9]{3}[0-9]{4}")) { // Для построения новой строки используем StringBuilder StringBuffer sb = new StringBuffer(); // получаем подстроку от исходной строки и добавляем к новой sb.append(str.substring(0, 3)); sb.append('-'); sb.append(str.substring(3, 6)); sb.append('-'); sb.append(str.substring(6)); // устанавливаем сформированное значение в поле ввода mainBTNField.setRawValue(sb.toString()); } } return res; } });
Валидация после введения недопустимого значения.
Ввод допустимого значения в формате xxxxxxxxxx. Необходимо преобразовать его после ввода к виду xxx-xxx-xxxx.
Вид введенного числа после преобразования.
Есть еще несколько полезных для валидации методов, которые могут быть вызваны у текстового поля. Это меод setValidateOnBlur(Boolean flag) и метод setAutoValidate(Boolean flag).
mainBTNField.setValidateOnBlur(true);
Метод setValidateOnBlur(Boolean flag) устанавливает чтобы поле валидировалось после потери фокуса.
mainBTNField.setAutoValidate(true);
Метод setAutoValidate(Boolean flag) устанавливает чтобы валидация происходила после нажатия каждой клавиши.
Комментариев нет:
Отправить комментарий