如何在vaadin 8中绑定textfield?

时间:2017-09-29 13:58:41

标签: data-binding vaadin8

我正在将我的应用程序从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);

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

2 个答案:

答案 0 :(得分:2)

查看Vaadin docs的表单绑定数据。代码示例显示了您的需求:您可以在forField上调用Binder以获取允许添加验证器和转换器的构建器,最后bind到相应的bean属性。要使字段显示绑定器上Project对象调用readBean中的值。 writeBean允许将字段数据写入Project对象。

答案 1 :(得分:2)

您可以这样添加验证器:

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;
}