vaadin23 ComboBox.setValue не работает с ошибкой преобразования

Я использую vaadin23 для отображения списка часовых поясов в поле со списком с помощью связующего:

      
ComboBox<ZoneId> timezoneField = new ComboBox<>();
timezoneField.setItemLabelGenerator(zoneId -> zoneId.getId());
timezoneField.setItems(Timezones.getZones());
binder.forField(timezoneField)
                .bind("timezone");
final var registration = new Registration(member, organisation);
binder.setBean(registration);

Приведенный выше код работает нормально, пока я не попытаюсь установить значение по умолчанию:

              UI.getCurrent().getPage().retrieveExtendedClientDetails(extendedClientDetails ->
            {
                int timezoneOffest = extendedClientDetails.getRawTimezoneOffset();
                var possibleZones = Conversions.timezonesFromOffset(timezoneOffest);
                if (possibleZones.size() != 0)
                {
                    // this line throws
                    this.timezoneField.setValue((ZoneId) possibleZones.get(0));
                }

            });

возможные зоны возвращают список ZoneId, но в отладчике они отображаются как ZoneRegion. Я думаю, что это нормально, так как ZoneRegion — это тип ZoneId. Я делаю приведение при вызове setValue на всякий случай.

Итак, когда я звоню:

      this.timezoneField.setValue((ZoneId) possibleZones.get(0));

Выдается следующая ошибка:

       com.vaadin.flow.data.binder.BindingException: An exception has been thrown inside binding logic for the field element [suppress-template-warning='', _inputElementValue='', _clientSideFilter='false', selectedItem='null', invalid='false', pageSize='50', itemValuePath='key', itemIdPath='key', value='1']
    at com.vaadin.flow.data.binder.Binder$BindingImpl.execute(Binder.java:1542) ~[flow-data-23.0.4.jar:23.0.4]
    at com.vaadin.flow.data.binder.Binder$BindingImpl.doConversion(Binder.java:1286) ~[flow-data-23.0.4.jar:23.0.4]
    at com.vaadin.flow.data.binder.Binder$BindingImpl.doValidation(Binder.java:1306) ~[flow-data-23.0.4.jar:23.0.4]
    at com.vaadin.flow.data.binder.Binder$BindingImpl.validate(Binder.java:1247) ~[flow-data-23.0.4.jar:23.0.4]
    at com.vaadin.flow.data.binder.Binder.lambda$doWriteIfValid$3(Binder.java:2245) ~

...

    at com.vaadin.flow.data.binder.Binder.doWriteIfValid(Binder.java:2246) ~[flow-data-23.0.4.jar:23.0.4]

....
com.vaadin.flow.component.internal.AbstractFieldSupport.setValue(AbstractFieldSupport.java:135) ~[flow-server-23.0.4.jar:23.0.4]
    at com.vaadin.flow.component.AbstractField.setValue(AbstractField.java:181) ~[flow-server-23.0.4.jar:23.0.4]
    at com.vaadin.flow.component.combobox.ComboBox.setValue(ComboBox.java:396) ~[vaadin-combo-box-flow-23.0.5.jar:?]
    at dev.onepub.ui.views.noauth.RegistrationView.lambda$4(RegistrationView.java:171) ~[classes/:?]

...

caused by:

Caused by: java.lang.ClassCastException: Cannot cast java.time.ZoneRegion to java.lang.String
    at java.lang.Class.cast(Class.java:3889) ~[?:?]
    at com.vaadin.flow.data.converter.Converter.lambda$from$957be2b0$1(Converter.java:104) ~[flow-data-23.0.4.jar:23.0.4]
    at com.vaadin.flow.data.binder.Result.of(Result.java:90) ~[flow-data-23.0.4.jar:23.0.4]
    at com.vaadin.flow.data.converter.Converter.lambda$from$b652e465$1(Converter.java:104) ~[flow-data-23.0.4.jar:23.0.4]
    at com.vaadin.flow.data.converter.Converter$1.convertToModel(Converter.java:130) ~[flow-data-23.0.4.jar:23.0.4]
    at com.vaadin.flow.data.converter.Converter$2.lambda$convertToModel$6b579330$1(Converter.java:165) ~[flow-data-23.0.4.jar:23.0.4]
    at com.vaadin.flow.data.binder.SimpleResult.flatMap(SimpleResult.java:65) ~[flow-data-23.0.4.jar:23.0.4]
    at com.vaadin.flow.data.binder.ValidationResultWrap.flatMap(ValidationResultWrap.java:67) ~[flow-data-23.0.4.jar:23.0.4]
    at com.vaadin.flow.data.converter.Converter$2.convertToModel(Converter.java:165) ~[flow-data-23.0.4.jar:23.0.4]
    at com.vaadin.flow.data.binder.Binder$BindingImpl.lambda$doConversion$0(Binder.java:1288) ~[flow-data-23.0.4.jar:23.0.4]

Отмечу, что преобразование жалуется на преобразование ZoneRegion в String.

Учитывая, что поле со списком имеет тип ZoneId и имеет ItemLabelGenerator, я не понимаю, почему эта ошибка может быть сгенерирована?

0 ответов

Другие вопросы по тегам