2015-03-11 2 views
1

В моей таблице рендеринг строк содержит компоненты. После загрузки источника данных в таблицу иногда появляются пустые поля (компоненты не видны, текст - да). У меня нет никаких исключений.Таблица Vaadin: нет компонентов в таблице

Это происходит, когда я прокручиваю содержимое таблицы. После обновления источника данных таблицы все в порядке.

Что случилось? В приложении есть пример.

enter image description here

+0

Какой источник данных вы используете? Возможно, какой-то дублирующий первичный идентификатор? (Duplicate itemId's) –

+0

Какую версию Vaadin вы используете? –

+0

Я использую Vaadin 7.3.10, контейнер: BeanItemContainer. Я сопоставляю объект базы данных со своим собственным компонентом, который содержит сеттеры и геттеры для TextField, ComboBox и т. Д. Объект Db имеет hashcode и equals методы по идентификатору, но мой собственный компонент не является. Таблица - это аддон: FilteringTable (https://vaadin.com/directory#addon/filteringtable). Возможно, это хороший ответ, что записи имеют повторяющиеся первичные идентификаторы, я проверяю их. Но когда я настраиваю тот же источник данных и загружаю его в таблицу во второй раз, все в порядке. Все записи в моей БД уникальны –

ответ

0

я нашел решение. Я думаю, что это может быть ошибкой.

INVALID РЕШЕНИЕ:

  1. Загрузка данных в таблице
  2. Выделите таблицу с данными, например. 50% содержимого таблицы
  3. Загрузить новые данные в таблице
  4. Таблица не отображает все компоненты

правильное решение:

  1. Загрузка данных в таблице
  2. прокрутки таблицу с данными в например. 50% содержимого таблицы
  3. прокрутки таблицы к началу, к первому элементу таблицы
  4. загружать новые данные в таблице
  5. Таблица отображения все компоненты

В Vaadin 7.4.1 существует эта же ошибка. Может быть, рекомендуется воссоздать таблицу?

OK. Теперь это работает. Это временное решение. Я повторно создаю таблицу и загружаю данные в новую таблицу:

private void createTable() { 
    pzbs = (FilterTable) buildTable(); 
    h.addComponent(pzbs); 
    h.setExpandRatio(pzbs, 1.0f); 
} 

private void recreateTable() { 
    h.removeComponent(pzbs); 
    createTable(); 
} 

private Component buildRoutes() { 
    routes = new ListSelect() { 
     { 
      setNullSelectionAllowed(false); 
      setSizeUndefined(); 
      setWidth(100.0f, Sizeable.Unit.PERCENTAGE); 
      setHeight(100.0f, Sizeable.Unit.PERCENTAGE); 
      setImmediate(true); 
     } 
    }; 
    routes.addValueChangeListener((Property.ValueChangeEvent event) -> { 
     if (routes.getValue() != null) { 
      recreateTable(); 
      countAndUpdatePercentage(countCorrectReadouts()); 
      sendedToPSG.select(null); 
      selectedRoute = (KTREntity) routes.getValue(); 
      updateTable(); 
     } 
    }); 

    return routes; 
} 
Смежные вопросы