Задать вопрос
vanesxl
@vanesxl

Как работает валидация в vaadin 8?

Добрый день! Изучаю vaadin 8, необходимо по работе.
накидал форму, создал класс Person:
package org.example;
import java.util.Date;

public class Person {

    private String surname;
    private String name;
    private String middleName;
    private Date birthday;
    private String snils;

    public void setSurname(String surname){
        this.surname = surname;
    }
    public String getSurname(){
        return surname;
    }

    public void setName(String name) { this.name = name; }
    public String getName() { return name; }

    public void setMiddleName(String middleName) { this.middleName = middleName; }
    public String getMiddleName() { return middleName; }

    public void setBirthday(Date birthday) { this.birthday = birthday; }
    public Date getBirthday() { return birthday; }

    public void setSnils(String snils) { this.snils = snils; }
    public String getSnils() { return snils; }
}

Далее создал поле textField и пытаюсь сделать валидацию:
final TextField surname = new TextField("Фамилия");
        surname.setWidth("50%");
        surname.setMaxLength(100);

        new Binder<Person>().forField(surname)
                .asRequired("Поле обязательно для заполнения")
                .withValidator(str -> str.length() >= 4, "Фамилия не должна быть короче 4 символов")
                .bind(Person::getSurname, Person::setSurname);

И тут у меня появились некоторые вопросы. Во первых для чего нужно передавать класс Person? Не совсем понятна строка:
.bind(Person::getSurname, Person::setSurname);
То есть если валидация проходит, то данные записываются в соответствующее поле класса?
Извиняюсь за возможно глупые вопросы)
  • Вопрос задан
  • 96 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@acwartz
Тут должна быть ваша реклама.
Класс Binder связывает элемент UI c классом Person, и сам управляет передачей данных в в геттер/сеттер когда поле считает валидным, для этого и передаются ссылки на методы геттера/сеттера класса Person в .bind
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
YuriyVorobyov1333
@YuriyVorobyov1333
Software Developer
По сути, Binder - функция привязки к формам, т.е. мы связываем объект с полями для отображения. Binder помимо валидации также будет преобразовывать значения полей в значения полей класса. И функция .bind() обычно является завершением процесса привязки, именно в ней мы делаем биндинг на наш основной класс для проверки.
По сути, можно сказать и так:
То есть если валидация проходит, то данные записываются в соответствующее поле класса?

Мы могли бы изобретать велосипед, но Binder все делает за нас и является той самой связующей прослойкой между нашим кодом класса и формами пользовательского интерфейса
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы