Поиск по этому блогу

пятница, 30 ноября 2012 г.

GXT TextField Validator с преобразованием введенной строки

Создание валидаторов для полей ввода является стандартной задачей, с которой сталкиваются разработчики. В GXT процесс установки валидатора для текстового поля очень прост. В моем случае необходимо создать валидатор для текстового поля. Условия следующие.
В тестовое поле можно вводить только числа в формате 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) устанавливает чтобы валидация происходила после нажатия каждой клавиши.

Комментариев нет:

Отправить комментарий