Vaadin7 - сетка отключена при снятии выделения

Как отключить отмену выбора строки Grid в Vaadin 7, но с разрешением на выбор другой строки с помощью клавиатуры или щелчка мыши?

Grid grid = new Grid(container);
grid.setSelectionMode(Grid.SelectionMode.SINGLE);

Например, это возможно для более старого компонента Table - SO answer. Но я широко использую Grid, поэтому я хочу использовать его и в этом случае.


person jsosnowski    schedule 13.10.2015    source источник


Ответы (2)


Я нашел одно интересное решение, но, к сожалению, не идеальное.

Чтобы предотвратить отмену выбора строки, мы могли бы написать SelectionListener и поместить туда некоторую логику:

grid.setSelectionMode(Grid.SelectionMode.SINGLE);
grid.addSelectionListener(event -> {
    Set<Object> selected = event.getSelected();
    if (selected == null || selected.isEmpty()) {
        Set<Object> removed = event.getRemoved();
        removed.stream().filter(Objects::nonNull).forEach(someGrid::select);
    }
});

Таким образом, предполагая режим одиночного выбора, если текущий выбор пуст, предыдущая выбранная строка должна быть выбрана снова. Но если текущий выбор не пуст, это означает, что кто-то выбрал другую строку - это не требует никаких действий.

Это круто, но недостаточно - каждый щелчок (выбор) вызывает http вызов и передачу по сети. Это недостаток.

person jsosnowski    schedule 13.10.2015

В Vaadin 8 вы можете использовать:

grid.setSelectionMode(SINGLE);
((SingleSelectionModel) grid.getSelectionModel()).setDeselectAllowed(false);
person Bruno Eberhard    schedule 29.03.2018