Vaadin Combobox - 无效自定义输入时没有错误
Vaadin Combobox - no error upon invalid custom input
我正在使用 Vaadin 14.1.21 并且想要一个下拉框(组合框)来显示整数值,并且还允许自定义输入。
我在字段的数据类中将 Integer 作为类型,但 UI 字段类型是 String,因为我还需要启用自定义输入,.我将 withConverter 与自定义转换器结合使用,因为我不想在 UI 中显示千位分隔符(在我的例子中是点)。它对所有提供的下拉项目都按预期工作 - 当我 select 提供的下拉菜单的 'invalid' 项目 ("Error Message Item") 时,我的自定义错误显示在组合框下方。
当我输入无效的自定义值时出现问题,例如“329hhh2”- 我的自定义转换器!
在无效自定义输入时没有收到任何错误消息
我根本没有收到任何错误,当我想 "save" 我的对象时,(无效的)组合框值就消失在必杀技中,我得到 Null 作为字段值。
谁能告诉我我做错了什么?
这是我的代码示例(我尽量保持它尽可能短,不遗漏任何内容):
public class RisikoForm extends Div {
private ComboBox<String> number_string_combobox;
public void instantiate_string_combobox() {
number_string_combobox = new ComboBox<>();
number_string_combobox.setItems("6583212", "114514", "879278", "Error Message Item");
number_string_combobox.setLabel("Number");
number_string_combobox.addCustomValueSetListener(event -> event.getDetail());
}
private static class Id_StringToInteger_Converter extends StringToIntegerConverter {
public Id_StringToInteger_Converter() {
super("Custom Error: Input cannot be converted to integer");
}
@Override
protected NumberFormat getFormat(Locale locale) {
final NumberFormat format = super.getFormat(locale);
format.setGroupingUsed(false);
return format;
}
}
public Form(ViewLogic sampleCrudLogic) {
this.instantiate_string_combobox();
content.add(number_string_combobox);
binder = new BeanValidationBinder<>(Data.class);
binder.forField(number_string_combobox)
.withNullRepresentation("")
.withConverter(new Id_StringToInteger_Converter())
.bind(Data::getIntegerNumber, Data::setIntegerNumber);
}
}
public class Data implements Serializable {
private Integer integerNumber;
public Integer getIntegerNumber() {
return integerNumber;
}
public void setIntegerNumber(Integer integerNumber) {
this.integerNumber = integerNumber;
}
}
您的自定义值集侦听器目前处于空操作状态。你必须对事件做出反应。例如:
addCustomValueSetListener(event -> number_string_combobox.setValue(event.getDetail()))
见example under "Allow custom values" or "Storing custom values"
我正在使用 Vaadin 14.1.21 并且想要一个下拉框(组合框)来显示整数值,并且还允许自定义输入。
我在字段的数据类中将 Integer 作为类型,但 UI 字段类型是 String,因为我还需要启用自定义输入,.我将 withConverter 与自定义转换器结合使用,因为我不想在 UI 中显示千位分隔符(在我的例子中是点)。它对所有提供的下拉项目都按预期工作 - 当我 select 提供的下拉菜单的 'invalid' 项目 ("Error Message Item") 时,我的自定义错误显示在组合框下方。
当我输入无效的自定义值时出现问题,例如“329hhh2”- 我的自定义转换器!
在无效自定义输入时没有收到任何错误消息我根本没有收到任何错误,当我想 "save" 我的对象时,(无效的)组合框值就消失在必杀技中,我得到 Null 作为字段值。
谁能告诉我我做错了什么?
这是我的代码示例(我尽量保持它尽可能短,不遗漏任何内容):
public class RisikoForm extends Div {
private ComboBox<String> number_string_combobox;
public void instantiate_string_combobox() {
number_string_combobox = new ComboBox<>();
number_string_combobox.setItems("6583212", "114514", "879278", "Error Message Item");
number_string_combobox.setLabel("Number");
number_string_combobox.addCustomValueSetListener(event -> event.getDetail());
}
private static class Id_StringToInteger_Converter extends StringToIntegerConverter {
public Id_StringToInteger_Converter() {
super("Custom Error: Input cannot be converted to integer");
}
@Override
protected NumberFormat getFormat(Locale locale) {
final NumberFormat format = super.getFormat(locale);
format.setGroupingUsed(false);
return format;
}
}
public Form(ViewLogic sampleCrudLogic) {
this.instantiate_string_combobox();
content.add(number_string_combobox);
binder = new BeanValidationBinder<>(Data.class);
binder.forField(number_string_combobox)
.withNullRepresentation("")
.withConverter(new Id_StringToInteger_Converter())
.bind(Data::getIntegerNumber, Data::setIntegerNumber);
}
}
public class Data implements Serializable {
private Integer integerNumber;
public Integer getIntegerNumber() {
return integerNumber;
}
public void setIntegerNumber(Integer integerNumber) {
this.integerNumber = integerNumber;
}
}
您的自定义值集侦听器目前处于空操作状态。你必须对事件做出反应。例如:
addCustomValueSetListener(event -> number_string_combobox.setValue(event.getDetail()))
见example under "Allow custom values" or "Storing custom values"