Vaadin组合框-无效的自定义输入时没有错误

问题描述 投票:0回答:1

我正在使用Vaadin 14.1.21,并且希望下拉框(组合框)显示整数值,并且还允许自定义输入。

我在字段的数据类中具有Integer作为类型,但是UI字段类型为String,因为我还需要启用自定义输入。我将withConverter与自定义转换器结合使用,因为我不想在UI中显示千位分隔符(在我的情况下为点)。对于所有提供的下拉项目,它均按预期方式工作-当我选择下拉菜单中提供的“无效”项目(“错误消息项”)时,我的自定义错误显示在组合框下方。

当我输入无效的自定义值(例如, “ 329hhh2”-我从自定义转换器输入的无效自定义输入没有错误

我一点也没有收到任何错误,当我想“保存”我的对象时,(无效的)组合框值会消失在必杀技中,并且我将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 Dataclass implements Serializable {

   private Integer integerNumber;

    public Integer getIntegerNumber() {
        return integerNumber;
    }

    public void setIntegerNumber(Integer integerNumber) {
        this.integerNumber = integerNumber;
    }

}
java vaadin vaadin-flow vaadin14
1个回答
0
投票

您的自定义值设置侦听器现在是空手。您必须对事件做出反应。例如:

addCustomValueSetListener(event -> number_string_combobox.setValue(event.getDetail()))

请参见example under "Allow custom values" or "Storing custom values"

© www.soinside.com 2019 - 2024. All rights reserved.