我正在将我的应用程序从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);
我不确定它是否正确,因为我不知道如何使用上面代码行中的“值”以及如何添加验证器。
答案 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;
}