如何在 vaadin 8 中绑定文本字段?

How to bind with textfield in vaadin 8?

我正在将我的应用程序从 vaadin 7 迁移到 8。我无法理解如何将对象绑定到文本字段。 在 vaadin 7 中,我有以下内容:

public void setProject(Project value, boolean hasScreenedReferences)
{
    this.project = value;

    TextField projectNameTextField = new TextField();
    projectNameTextField.setStyleName("step_one_project_name_text");
    projectNameTextField.setPlaceholder("Review Name");

    // Bind the project UI components to the new object 
     BeanItem<Project> projectBean = new BeanItem<Project>(value);
     projectNameTextField.projectNameTextField(projectBean.getItemProperty("name"));
     projectNameTextField.addValidator(new BeanValidator(Project.class, "name"));
  .......
}

现在正如我所提到的,我无法理解它在 vaadin 8 中的工作方式,我在阅读了一些在线论坛后尝试了以下方法

    // Bind the project UI components to the new object
    Binder<Project> binder = new Binder<Project>();
    binder.bind(projectNameTextField, Project::getName, Project::setName);

我不确定它是否正确,因为我不知道如何在上面的代码行中使用 "value" 以及如何添加验证器。

查看 Vaadin docs 以将数据绑定到表单。代码示例显示了您的需要:您可以在 Binder 上调用 forField 以获得允许添加验证器和转换器的构建器,最后 bind 到适当的 bean 属性.要使字段显示来自 Project 对象的值,请在活页夹上调用 readBeanwriteBean 允许将字段数据写入您的 Project 对象。

您可以通过这种方式添加验证器:

Binder<Project> binder = new Binder<>();
binder.forField(projectNameTextField)
      .withValidator(new StringLengthValidator("Invalida length!", 5, null))
      .bind(Project::getName, Project::setName);

要使字段显示来自 Project 对象调用的值 readBean:

binder.readBean(project);

然后你可以执行验证例如:

if (!binder.writeBeanIfValid(project)) {
       Notification.show("Invalid!!", Notification.Type.WARNING_MESSAGE);
       return;
}