2016-10-19 13 views
6

Używanie vaadin (7.7.3) Filtruję siatkę według nazwy, to filtrowanie zajmuje kilka sekund, aby usunąć obiekty z gui Grid gui. I tak, jeśli kliknę na tym timelapse wiersz o Grid, który jest usuwany z Container, podnosi wyjątek:Jak wychwycić wyjątek podczas filtrowania siatki 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) 

myślę, że to jest normalne, ponieważ usuwa obiekty z Container i to będzie propagować do gui.

Zastanawiam się nad uchwyceniem wyjątku nadpisującego metodę checkItemIdExists() w mojej klasie Grid, ale wychwyciłoby to wyjątek w każdej sytuacji i nie jest to zachowanie, którego szukam.

Moje pytanie brzmi: Jak mogę uchwycić ten wyjątek tylko w tym przypadku?

+0

Pytasz, jak usunąć zaznaczenie elementu przed użyciem filtra? czy pytasz, jak uniknąć tego wyjątku? – JorgeHortelano

+0

Po prostu złap IllegalArgumentException .. – Jobin

+0

Złapanie wyjątku nie jest możliwe. Ten wyjątek nie został uruchomiony w kodzie aplikacji. Wydaje się, że jest uruchamiany przez bibliotekę komponentów vaadin podczas korzystania z komponentu. – JorgeHortelano

Odpowiedz

1

Jedyne obejście, które znalazłem, to zastąpić model wyboru siatki w Vaadin, aby wyłączyć metodę checkItemIdExists. Jest to metoda, która uruchamia wyjątek, który masz.

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

Można teraz to to do swojego Girda z:

setSelectionModel(new SingleSelectionModelNotChecked()); 

Oczywiście, teraz siatka nie może sprawdzić, że element wybrany w sieci czy nie.

0

Możesz użyć Viritin Add-on https://vaadin.com/directory#!addon/viritin obsługuje stronicowanie po stronie serwera, Vaadin Grid załaduje wszystkie dane z bazy danych lub użyjesz źródła danych do wysłania ContainerDataSource.

Powiązane problemy