private void initialize() { optionsField = formFieldFactory.createField(definition.getField(), locale); layout.addComponent(optionsField); optionsField.addValueChangeListener(e -> { if (e.getOldValue() == null || e.getOldValue() == null) { return; } EditorView<T> oldView = subForm(e.getOldValue()); EditorView<T> newView = subForm(e.getValue()); layout.replaceComponent(oldView.asVaadinComponent(), newView.asVaadinComponent()); }); definition.getForms().forEach(formDefinition -> { ItemProviderStrategy<T> subFormProviderStrategy = create(((ComplexPropertyDefinition<T>) formDefinition).getItemProvider(), formDefinition, itemProviderStrategy); EditorView<T> subForm = getViewProvider().create(formDefinition); subForms.put(formDefinition.getName(), Pair.of(subForm, subFormProviderStrategy)); }); binder = ConfiguredBinder.withPropertySet(propertySetFactory.fromFieldDefinitions(Collections.singletonList(definition.getField()), locale)); binder.forField(optionsField) .withConverter(new StringToOptionDefinitionConverter(definition.getField())) .bind(resolvePropertyNameByLocale(definition.getField().getName(), locale, definition.getField().isI18n())); }