绑定组合框 vaadin 8

Binding a combo box vaadin 8

我正在尝试将 vaadin 7 代码转换为 vaadin 8 代码而不是使用 BeanFieldGroup vaadin 8 文档使用 Binder 将表单字段绑定到 class。这似乎不适用于组合框。

我一直在寻找一种使用似乎不适用于组合框的转换器的方法。用于绑定数据以形成 vaadin 文档 here

对于一个字段,转换器工作:

binder.forField(age).withConverter(
                    new 
StringToIntegerConverter("Must enter a number")).bind(
                    Student::getAge, 
Student::setAge);

但是对于组合框,我不确定这将如何工作。

ComboBox<String> gender = new ComboBox<String>("Gender");

Binder binder = new Binder<Student>(Student.class);

binder.bind(gender, Student::getGender, Student::setGender);

我知道这是行不通的,有没有一种方法可以为组合框编写转换器,或者应该完全使用另一种方法。

我发现在 vaadin 8 中使用 bindInstanceFields 将表单数据绑定到 class。

Binder binder = new Binder<Student>(Student.class);

binder.bindInstanceFields(this);
binder.readBean(student);

您在评论中提到 Student 对象中的 gender 字段实际上是一个枚举,而不是一个字符串。

你的错误是你用字符串类型而不是你的 Gender 枚举定义了 ComboBox。

假设您的性别枚举 class 被称为 Gender,这将起作用:

ComboBox<Gender> gender = new ComboBox<Gender>("Gender");
Binder binder = new Binder<Student>(Student.class);
binder.bind(gender, Student::getGender, Student::setGender);

您可以向 ComboBox 添加 ItemLabelGenerator 来定义 Gender 枚举的显示方式。默认情况下它将使用 class 的 toString()。但是,如果您愿意,您可以使用它来构建 Vaadin 组件。在 documentation 中查看它是如何完成的)。