NativeSelect in FormLayout with Binder

Hello,

I am struggling with a NativeSelect UI in a form that I am building. It seems that the Binder accepts only fields as input. I would be greatful if you could suggest me any workaround that will allow me to pass the selected option from the NativeSelect as a String to setSelect.

TextField name = new TextField("Name");
name.setWidth(100,Unit.PERCENTAGE);
List<String> selectOptions = new ArrayList<>();
mdnOptions.add("Option One");
mdnOptions.add("Option Two");
NativeSelect select = new NativeSelect();
select.setWidth(100,Unit.PERCENTAGE);
select.setItems(selectOptions);
select.setEmptySelectionAllowed(false);
select.setSelectedItem(1);
Binder<Dummy> binder = new Binder<>();
binder.forField(name)
.asRequired("Some error")
.bind(Dummy::getName, Dummy::setName);
binder.forField(select)
.bind(Dummy::getSelect, Dummy::setSelect);
Label validationStatus = new Label();
binder.setStatusLabel(validationStatus); 
Dummy currentEntry = new Dummy();
binder.setBean(currentEntry);
Button btnSend = new Button("Send");
btnSend.setEnabled(false);
btnSend.addClickListener(event -> System.out.println(binder.getBean());
binder.addStatusChangeListener(event -> btnSend.setEnabled(binder.isValid()));



Dummy
:

private String name; private String select; public void setName(String name) { this.name = name; } public void setSelect(String select) { this.select = select; } public String getName() { return name; } public String getSelect() { return select; } @Override public String toString() { final StringBuilder sb = new StringBuilder("As2Config{"); sb.append("name='").append(name).append('\''); sb.append(", select='").append(select).append('\''); sb.append('}'); return sb.toString(); } Thank you!

I think the code you have should work. Maybe the binder does not update the bean automatically when you bind like that so you may need to call binder.writeBean to update the bean with the component values.

In my opinion, binding by name is easier and automatically updates the bean values when UI values change. This works for me. Does this help?[code]
public class ValueChangeView extends VerticalLayout implements View {
public class Data {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}

private Data data;

@Override
public void enter(ViewChangeEvent event) {
data = new Data();
Binder binder = new Binder<>(Data.class);
NativeSelect combo = new NativeSelect<>(“Select”);
String items = { “One”, “Two” };
combo.setItems(items);
addComponent(combo);
binder.forField(combo).bind(“value”);
binder.setBean(data);
}
}
[/code]

Thank you, Sergei. The binding by name worked.