绑定组合框 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 中查看它是如何完成的)。
我正在尝试将 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 中查看它是如何完成的)。