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

标签 java vaadin7 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$1.select(Grid.java:1445)

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

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

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

最佳答案

我发现的唯一解决方法是在 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());

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

关于java - 如何在过滤 vaadin 网格时捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40126346/

相关文章:

java - 自定义 Vaadin Flow Grid 组件的选择列标题

vaadin - 禁用类路径扫描的 Vaadin 14 应用程序中存在多个网格标题行的问题

java - 在 QuickBlox 中接受 Android 和 iOS 之间的调用

java - 从特定 USB 端口捕获键盘输入

java - 如何在Jsoup中删除部分网页?

java - Vaadin 中的 session 处理

java - 设置网格中每列的宽度 - Vaadin

java - 安卓测试 : how to verify from JUnit testcase if the dialog was opened?

javascript - 如何从 Vaadin 获取数据到 HTML/Jsp 文件?

java - 如何重置 Spring 托管 Bean