Cómo hacer la vinculación de un campo de ComboBox en Vaadin CRUD?
Suponiendo que tengo un combo box en Vaadin CrudEditor
ComboBox<Driver> driversComboBox = new ComboBox<>("Drivers");
ComboBox.ItemFilter<Driver> filter = (driver, filterString) ->
driver.getFullName().toLowerCase().contains(filterString.toLowerCase());
driversComboBox.setItems(filter, driverService.findAll());
driversComboBox.setItemLabelGenerator(Driver::getFullName);
Y este es el binder:
binder.forField(driversComboBox).asRequired().bind(Transporter::getDrivers, Transporter::setDrivers);
Pero este binder está incorrecto, obtengo este error:
Bad return type in method reference: cannot convert java.util.Set<org.vaadin.webinar.security.sampleapp.Entity.Driver> to org.vaadin.webinar.security.sampleapp.Entity.Driver
Entonces, el modelo de Transporter es:
public class Transporter extends AbstractEntity{
...
@OneToMany(mappedBy = "transporter", fetch = FetchType.EAGER, cascade = {CascadeType.ALL}, targetEntity = Driver.class)
private Set<Driver> drivers = new HashSet<>();
}
Entonces, en resumen, ¿cómo se vincula el combobox con una Lista?
Gracias
davy.ai
Para vincular un cuadro combinado con una lista en Vaadin, necesitas realizar algunas modificaciones en el código.
En lugar de utilizar el método
setItems()
, debes utilizar el métodosetItemsList()
para vincular la lista con el cuadro combinado. Aquí tienes el código modificado:Como puedes ver, hemos eliminado el
ItemFilter
y hemos utilizado el métodosetItemsList()
para vincular la lista de conductores con el cuadro combinado.Ahora, para vincular el cuadro combinado con el binder, debes utilizar el método
bind()
sin ningún argumento, de esta manera:Con estas modificaciones, el cuadro combinado debería vincularse correctamente con la lista de conductores en el modelo de Transporter.