GWT DataGrid getRowElement выбрасывает IndexOutOfBoundsException после ручной настройки страницы - PullRequest
0 голосов
/ 25 января 2020

Этот вопрос почти , но не совсем идентичен GWT CellTable getRowElement, выбрасывающим IndexOutOfBoundsException , однако принятый там ответ не работает для меня.

Я пытаюсь получить DataGrid для отображения другой строки и ячейки из текущего представления. Иногда это может быть на той же странице, в основном нет. Если строка находится на текущей странице - либо на первой странице, либо на странице, на которую была вручную разбита страница, - тогда получение строки с помощью getRowElement (rowIdx - pageStart) работает в соответствии с ответом, упомянутым выше.

Однако, если строка не находится на текущей странице, я не нашел способа получить элемент строки.

Я попытался вычислить соответствующую страницу и настроить страницу с помощью SimplePager.setPage (), затем попытался получить элемент строки, используя либо фактический индекс строки, либо индекс, основанный на начале страницы (а также пробуя страницу до и страницу после, просто для хорошей меры). Все они терпят неудачу с IndexOutOfBoundsExceptions. Я попытался принудительно запустить RangeChangedEvent после установки страницы, но это не имеет значения (кроме выборки этого диапазона данных дважды.)

Я также пытался не устанавливать страницу и пытаться получить элемент строки , но попытка получить фактический индекс не удалась, как можно было ожидать, поскольку он не на текущей странице, и какой другой индекс вы бы использовали в противном случае?

Я использую GWT 2.8.1 и выполняю оба в контейнере Tomcat и в SuperDevMode в Eclipse + Chrome.

Что мне не хватает?

Спасибо, Линус

Пример вывода журнала ниже:

Set page from 0 to 7
scrollRow:366, scrollCol:4
currentPage:7, start: 350, size: 50
Range start: 350, length:50
getRow:366
java.lang.IndexOutOfBoundsException: Row index: 366, Row size: 2088
getRow:16
java.lang.IndexOutOfBoundsException: Row index: 16, Row size: 2088
getRow:316, // try previous page
java.lang.IndexOutOfBoundsException: Row index: 316, Row size: 2088
getRow:416, // try next page
java.lang.IndexOutOfBoundsException: Row index: 416, Row size: 2088
page:7, rowIdx:366, showRow:366, colIdx: 4 : java.lang.IndexOutOfBoundsException: Row index: 416, Row size: 2088

Чтобы дать контекст код, который производит это

    if ( cPage != showPage ) {
        GWT.log("Set page from " + cPage + " to " + showPage);
        gridPager.setPage(showPage);
    } 
    GWT.log("scrollRow:" + scrollToRow + ", scrollCol:"+ scrollToCol);
    GWT.log("currentPage:"+ gridPager.getPage() + ", start: " + gridPager.getPageStart() + ", size: "+ gridPager.getPageSize());
    Range range = dataGrid.getVisibleRange();
    int start = range.getStart();
    GWT.log("Range start: "+ range.getStart() + ", length:" + range.getLength());
    TableRowElement row;
    try { 
        int getRow = rowIdx;
        GWT.log("getRow:"+getRow);
        row = dataGrid.getRowElement(getRow);
    } catch (IndexOutOfBoundsException iob0 ) {
        GWT.log(String.valueOf(iob0));
        try { 
            int getRow = rowIdx-start;
            GWT.log("getRow:"+getRow);
            row = dataGrid.getRowElement(getRow);
        } catch (IndexOutOfBoundsException iob1 ) {

    <snip>

    TableCellElement cell = row.getCells().getItem(colIdx);
    cell.scrollIntoView();

1 Ответ

0 голосов
/ 24 апреля 2020

На случай, если кто-то окажется здесь:

Томас Бройер из группы пользователей GWT прямо сказал:

Несмотря на то, что dataGrid говорит, что у него есть строки, на самом деле пейджер данных не имел извлек строки.

https://groups.google.com/forum/#! topic / google-web-toolkit / 7J8H8yhV_CM

Мне пришлось настроить продолжение, чтобы позволить выборку, затем восстановить строку, чтобы я мог перейти к ней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...