过滤vaadin网格时如何捕获异常

时间:2016-10-19 08:44:44

标签: java vaadin7 vaadin-grid

使用vaadin(7.7.3)我按名称过滤网格,此过滤需要几秒钟才能从Grid gui中删除对象。因此,如果我点击从Grid中移除的Container的一行时间间隔,则会引发异常:

Caused by: java.lang.IllegalArgumentException: Given item id (5422bef6-e472-4d3e-af54-316c52d373da) does not exist in the container
at com.vaadin.ui.Grid$AbstractSelectionModel.checkItemIdExists(Grid.java:1371)
at com.vaadin.ui.Grid$SingleSelectionModel.select(Grid.java:1460)
at com.vaadin.ui.Grid$SingleSelectionModel$1.select(Grid.java:1445)

我想这是正常的,因为它会从Container中移除对象,然后它会传播到gui。

我曾想过在我的checkItemIdExists()类中捕获异常覆盖Grid方法,但它会捕获每种情况的异常,而不是我正在寻找的行为。

我的问题是:如何在这种情况下捕获此异常?

2 个答案:

答案 0 :(得分:1)

我找到的唯一解决方法是覆盖Vaadin中网格的选择模型以禁用checkItemIdExists方法。这是启动您拥有的异常的方法。

import com.vaadin.ui.Grid.SelectionModel;
import com.vaadin.ui.Grid.SingleSelectionModel;

public class SingleSelectionModelNotChecked extends SingleSelectionModel implements SelectionModel {

    @Override
    protected void checkItemIdExists(Object itemId) throws IllegalArgumentException {
    // Nothing to do. No check is done, no exception is launched when the filter is applying. 
    }
}

您现在可以将其包含在您的网格中:

setSelectionModel(new SingleSelectionModelNotChecked());

当然,现在网格无法检查网格中选择的元素与否。

答案 1 :(得分:0)

您可以使用Viritin加载项https://vaadin.com/directory#!addon/viritin 它支持服务器端分页,Vaadin Grid将从数据库加载所有数据,或者您将使用您的dataSource发送ContainerDataSource。