Vaadin Binding API и идентификаторы - PullRequest
0 голосов
/ 24 октября 2018

В настоящее время я работаю с Vaadin 10 и API привязки Vaadin.По сути, мне интересно, что я должен сделать, чтобы сохранить идентификаторы моих объектов.Предположим, у меня есть объект домена, представляющий сущность в базе данных.После загрузки или создания он имеет идентификатор.

public class Person {
  private String id;
  private String name;
  // ...
}

На мой взгляд, у меня есть поле для редактирования имени и подшивки для моего доменного объекта.

...
final TextField name = new TextField();
personBinder.bind(name, "name");
...

Теперь что мне делатьделать с идентификатором?Если я сохраняю и загружаю бин (readBean / writeBean), идентификатор просто исчезает.Однако, конечно, я не хочу показывать идентификатор на мой взгляд.Нужно ли хранить его в новом атрибуте моего класса просмотра?Или есть хитрость, чтобы сохранить такие атрибуты в связующем?Кажется, я могу получить бин с идентификатором, если вместо этого использую setBean / getBean, но это не так ...

Большое спасибо и наилучшие пожелания!

Редактировать 1:

Предположим, у меня есть следующий код

TextField name = new TextField();
personBinder.bind(name, "name");
add(name);

Button button = new Button("Save", e -> {
    Person p = new Person();
    personBinder.writeBeanIfValid(p);
    System.out.println(p.getName());
    System.out.println(p.getId());
});
add(button);

Person p = new Person();
p.setName("John");
p.setId("42");

personBinder.readBean(p);

Идентификатор, поскольку он не связан ни с одним полем, не сохраняется.

1 Ответ

0 голосов
/ 27 октября 2018

Кажется, что подход setBean / getBean на самом деле не ошибочен.По крайней мере, в документации Vaadin 8 есть пример, где это используется.Он указан в разделе «Автоматическое сохранение».Поэтому мой приведенный выше пример кода должен, вероятно, выглядеть примерно так:

TextField name = new TextField();
personBinder.bind(name, "name");
add(name);

Button button = new Button("Save", e -> {
    if (personBinder.validate().isOk()) {
      Person p = personBinder.getBean();
      System.out.println(p.getName());
      System.out.println(p.getId());
    }
});
add(button);

Person p = new Person();
p.setName("John");
p.setId("42");

personBinder.setBean(p);

До тех пор, пока нет ошибок проверки (что является причиной предварительной проверки), значения из полей сохраняются в bean-компоненте.,Конечно, нужно убедиться, что тот же компонент не каким-то образом модифицирован в другом месте.

...