Vaadin7 - 网格禁用取消选择

时间:2015-10-13 10:59:52

标签: java vaadin vaadin7 unselect vaadin-grid

如何在Vaadin 7中禁用取消选择Grid行,但是有权使用键盘或鼠标点击选择另一行?

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

例如,对于较早的Table组件 - SO answer,这是可能的。但我广泛使用Grid所以我想在这种情况下也使用它。

2 个答案:

答案 0 :(得分: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呼叫和网络传输。这是不利的。

答案 1 :(得分:1)

在Vaadin 8中你可以使用:

grid.setSelectionMode(SINGLE);
((SingleSelectionModel) grid.getSelectionModel()).setDeselectAllowed(false);