es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo hacer la vinculación de un campo de ComboBox en Vaadin CRUD?

Suponiendo que tengo un combo box en Vaadin CrudEditor, este será el código de la parte del combo box:

     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

Tags:  , ,

Answer

  1. Avatar for 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étodo setItemsList() para vincular la lista con el cuadro combinado. Aquí tienes el código modificado:


    ComboBox<driver> driversComboBox = new ComboBox<>("Conductores"); driversComboBox.setItemsList(driverService.findAll()); driversComboBox.setItemLabelGenerator(Driver::getFullName);

    Como puedes ver, hemos eliminado el ItemFilter y hemos utilizado el método setItemsList() 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:


    binder.forField(driversComboBox).asRequired().bind(Transporter::getDrivers, Transporter::setDrivers);

    Con estas modificaciones, el cuadro combinado debería vincularse correctamente con la lista de conductores en el modelo de Transporter.

Comments are closed.