2016-10-19 12 views
6

Sử dụng vaadin (7.7.3) Tôi lọc lưới theo tên, quá trình lọc này mất vài giây để xóa các đối tượng khỏi guồng Grid. Và như vậy, nếu tôi bấm vào timelapse rằng một hàng của Grid đó được lấy ra từ các Container, nó đặt ra một ngoại lệ:Cách bắt ngoại trừ khi lọc lưới vaadin

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) 

Tôi đoán đây là bình thường vì nó loại bỏ các đối tượng từ Container và sau đó nó sẽ tuyên truyền cho gui.

Tôi đã nghĩ đến việc bắt ngoại lệ ghi đè phương thức checkItemIdExists() trong lớp Grid của mình nhưng nó sẽ bắt ngoại lệ cho mọi tình huống và đó không phải là hành vi mà tôi đang tìm kiếm.

Câu hỏi của tôi là: Làm thế nào tôi có thể nắm bắt ngoại lệ này chỉ trong trường hợp này?

+0

Bạn đang hỏi cách bỏ chọn phần tử trước khi sử dụng bộ lọc? hoặc bạn đang hỏi làm thế nào để tránh ngoại lệ này? – JorgeHortelano

+0

Đơn giản chỉ cần bắt IllegalArgumentException .. – Jobin

+0

Bắt ngoại lệ là không thể. Ngoại lệ này không được khởi chạy trong mã ứng dụng. Dường như được đưa ra bởi thư viện thành phần vaadin khi sử dụng thành phần. – JorgeHortelano

Trả lời

1

Cách khắc phục duy nhất tôi đã tìm thấy, là ghi đè mô hình lựa chọn lưới trong Vaadin để vô hiệu phương thức checkItemIdExists. Đây là phương thức khởi chạy ngoại lệ bạn có.

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. 
    } 
} 

Bây giờ bạn có thể bao gồm này vào lưới điện của bạn với:

setSelectionModel(new SingleSelectionModelNotChecked()); 

Tất nhiên, bây giờ là lưới không thể kiểm tra xem thành phần được chọn trong trong lưới hay không.

0

Bạn có thể sử dụng Tiện ích Viritin https://vaadin.com/directory#!addon/viritin hỗ trợ phân trang bên máy chủ, Vaadin Grid sẽ tải tất cả dữ liệu từ cơ sở dữ liệu hoặc bạn sẽ sử dụng dataSource của mình để gửi ContainerDataSource.

Các vấn đề liên quan