В настоящее время не существует официального компонента множественного выбора для Vaadin Flow.
Однако вы можете использовать интеграцию Java веб-компонента multiselect-combo-box
для Vaadin Flow . Вы можете увидеть живую демонстрацию компонента здесь .
Чтобы использовать компонент, сначала добавьте в ваш файл pom.xml зависимость (проверьте, какая версия является последней, и измените ее соответствующим образом):
<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>
Затем создайте экземпляр компонента и заполните его элементами:
MultiselectComboBox<String> multiselectComboBox = new MultiselectComboBox();
multiselectComboBox.setLabel("Select items");
multiselectComboBox.setItems("Item 1", "Item 2", "Item 3", "Item 4");
При желании добавьте прослушиватель изменения значения, чтобы получать уведомления при изменении выбора:
multiselectComboBox.addValueChangeListener(e -> {
// get the currently selected items
Set<String> selectedItems = multiselectComboBox.getValue();
});
Чтобы использовать этот компонент в качестве сеточного фильтра, я изменил пример из таблицы Ваадина в документации , и он работает следующим образом:
// 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);
Надеюсь, это поможет вам достичь вашей цели!
BR
Goran