如何在过滤 vaadin 网格时捕获异常
How to catch an exception when filtering a vaadin grid
使用 vaadin (7.7.3) 我正在按名称过滤网格,此过滤需要几秒钟才能从 Grid
gui 中删除对象。因此,如果我单击从 Container
中删除的 Grid
的那一行,它会引发异常:
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.select(Grid.java:1445)
我想这是正常的,因为它从 Container
中删除了对象,然后它会传播到 gui。
我曾想过在我的 Grid
class 中捕获覆盖 checkItemIdExists()
方法的异常,但它会捕获每种情况下的异常,这不是我正在寻找的行为对于.
我的问题是:如何在这种情况下捕获此异常?
您可以使用 Viritin 插件 https://vaadin.com/directory#!addon/viritin
它支持服务器端分页,Vaadin Grid 将从数据库加载所有数据,或者您将使用数据源发送 ContainerDataSource。
我发现的唯一解决方法是覆盖 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.
}
}
您现在可以将其包含在您的 gird 中:
setSelectionModel(new SingleSelectionModelNotChecked());
当然,现在网格无法检查网格中是否选择了元素。
使用 vaadin (7.7.3) 我正在按名称过滤网格,此过滤需要几秒钟才能从 Grid
gui 中删除对象。因此,如果我单击从 Container
中删除的 Grid
的那一行,它会引发异常:
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.select(Grid.java:1445)
我想这是正常的,因为它从 Container
中删除了对象,然后它会传播到 gui。
我曾想过在我的 Grid
class 中捕获覆盖 checkItemIdExists()
方法的异常,但它会捕获每种情况下的异常,这不是我正在寻找的行为对于.
我的问题是:如何在这种情况下捕获此异常?
您可以使用 Viritin 插件 https://vaadin.com/directory#!addon/viritin 它支持服务器端分页,Vaadin Grid 将从数据库加载所有数据,或者您将使用数据源发送 ContainerDataSource。
我发现的唯一解决方法是覆盖 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.
}
}
您现在可以将其包含在您的 gird 中:
setSelectionModel(new SingleSelectionModelNotChecked());
当然,现在网格无法检查网格中是否选择了元素。