Cuadro combinado de selección múltiple de flujo Vaadin

Necesito mostrar el cuadro combinado de selección múltiple en la fila del encabezado de mi cuadrícula para filtrar los registros de la cuadrícula.

Respuesta 1

Actualmente no existe un componente oficial de selección múltiple para Vaadin Flow.

Sin embargo, puede utilizar la integración de Java del multiselect-combo-boxcomponente web para Vaadin Flow . Puede ver la demostración en vivo del componente aquí .

Para usar el componente, primero agregue la dependencia a su archivo pom.xml (verifique cuál es la última versión y modifíquela en consecuencia):

    <dependency>
     <groupId>org.vaadin.gatanaso</groupId>
     <artifactId>multiselect-combo-box-flow</artifactId>
     <version>0.0.4</version>
    </dependency>

    <repository>
     <id>vaadin-addons</id>
     <url>http://maven.vaadin.com/vaadin-addons</url>
    </repository>

Luego instancia el componente y llénala con elementos:

MultiselectComboBox<String> multiselectComboBox = new MultiselectComboBox();
multiselectComboBox.setLabel("Select items");
multiselectComboBox.setItems("Item 1", "Item 2", "Item 3", "Item 4");

Opcionalmente, agregue un detector de cambio de valor para recibir notificaciones cuando una selección ha cambiado:

multiselectComboBox.addValueChangeListener(e -> {
   // get the currently selected items
   Set<String> selectedItems = multiselectComboBox.getValue();
});

Para usar este componente como filtro de cuadrícula, modifiqué el ejemplo de la documentación de Vaadin Grid y funciona de la siguiente manera:

// setup grid with data provider
List<Person> personList = getItems();
Grid<Person> grid = new Grid<>();

ListDataProvider<Person> dataProvider = new ListDataProvider<>(personList);
grid.setDataProvider(dataProvider);

// add a column
Grid.Column<Person> firstNameColumn = grid.addColumn(Person::getfirstName).setHeader("Name");

HeaderRow filterRow = grid.appendHeaderRow();

// define the multiselect combo box
MultiselectComboBox<String> multiselectComboBox = new MultiselectComboBox();

// set items to list of names
multiselectComboBox.setItems("Jack", "Nathan", "Andrew", "Peter", "Samuel");

// add a value change listener
multiselectComboBox.addValueChangeListener(e -> {
  // get the currently selected items
  Set<String> selectedItems = multiselectComboBox.getValue();
  String names = selectedItems.stream().collect(Collectors.joining(","));

  // filter the grid data provider
  if (selectedItems.size() > 0) {
    dataProvider.addFilter(person -> StringUtils.containsIgnoreCase(person.getfirstName(), names));
  } else {
    dataProvider.clearFilters();
  }
});

// set the component as a filter
filterRow.getCell(firstNameColumn).setComponent(multiselectComboBox);

¡Espero que esto te ayude a alcanzar tu objetivo!

BR,

Goran

Respuesta: 2

He creado algunos botones en XML y tengo un método que hará clic en abrir una URL. ¿Cómo vinculo este método a mi botón para que al pulsar / onClick llame al método? Aquí está el código del método: ...

En un programa de servlet creé una clase DAO que contiene una función, que deseo devolver un valor particular generado al ejecutar una consulta Oracle. Intenté algo como: public int ...

Estoy tratando de crear un grupo AD a través de mi aplicación Java. He creado con éxito un usuario, y ahora estoy tratando de crear un grupo. Tengo el siguiente código: clase pública ...

Entonces tengo una respuesta de XML Soap con campos de fecha / hora, que se representan de la siguiente manera: <BusStopTime> <BusStopId> 1023 </BusStopId> <Order> 1 </Order> <...