【问题标题】:How to catch an exception when filtering a vaadin grid过滤 vaadin 网格时如何捕获异常
【发布时间】:2016-10-19 08:44:43
【问题描述】:

使用 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() 方法的异常,但它会在每种情况下捕获异常,这不是我要寻找的行为。

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

【问题讨论】:

  • 您是在问如何在使用过滤器之前取消选择元素吗?还是您在问如何避免这种异常?
  • 简单地捕获 IllegalArgumentException..
  • 无法捕获异常。此异常不会在应用程序代码中启动。好像是vaadin组件库在使用组件时启动的。

标签: java vaadin7 vaadin-grid


【解决方案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());

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-04-22
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 1970-01-01
      • 1970-01-01
      • 2017-12-11
      • 1970-01-01
      • 2017-07-17
      相关资源
      最近更新 更多