Ваадин, TreeTable. SetParent

У меня проблема с созданием родительско-дочерней ссылки в моем TreeTable.

Настройка источника данных

table.setContainerDataSource(new TempPeopleContainer(((MyUI) UI.getCurrent()).peopleService.getItemList()));
table.setParent(1,0);

Как я могу установить идентификатор объекта в этом виде настройки источника данных? У меня нет явного идентификатора для элементов TreeTable.

Вот пример из vaadin, где вы можете увидеть "чёткое" определение идентификаторов для каждого элемента (код не из моего приложения):

 TreeTable ttable = new TreeTable("My TreeTable");
    ttable.addContainerProperty("Name", String.class, null);
    ttable.addContainerProperty("Number", Integer.class, null);
    ttable.setWidth("20em");

    // Create the tree nodes and set the hierarchy
    ttable.addItem(new Object[]{"Menu", null}, 0);
    ttable.addItem(new Object[]{"Beverages", null}, 1);
    ttable.setParent(1, 0);
    ttable.addItem(new Object[]{"Foods", null}, 2);
    ttable.setParent(2, 0);

это мое определение класса TempPeopleContainer:

private class TempPeopleContainer extends FilterableListContainer<People> {
    public TempPeopleContainer(final Collection<People> collection) {
        super(collection);
    }

    // This is only temporarily overridden until issues with
    // BeanComparator get resolved.
    @Override
    public void sort(final Object[] propertyId, final boolean[] ascending) {
        final boolean sortAscending = ascending[0];
        final Object sortContainerPropertyId = propertyId[0];
        Collections.sort(getBackingList(), (o1, o2) -> {
            int result = 0;
            if ("lastname".equals(sortContainerPropertyId)) {
                result = o1.getLastname().compareTo(o2.getLastname());
            }
            if (!sortAscending) {
                result *= -1;
            }
            return result;
        });
    }
}

Я надеюсь, что мой вопрос ясен. Благодарю.

1 ответ

Это зависит от вашего ItemContainer. Общее BeanItemContainer от vaadin сам использует элемент в качестве идентификатора элемента, как описано здесь https://vaadin.com/api/com/vaadin/data/util/BeanItemContainer.html

Вы используете витрин org.vaadin.viritin.ListContainer действуя как BeanItemContainer

Таким образом, вы можете использовать элементы из вашего списка в качестве itemId/newParentId если вы хотите придерживаться ваших реализаций ItemContainer.

Или вы можете пройти долгий путь и получить идентификаторы предметов, перебирая com.vaadin.data.Container.getItemIds() и проверьте вручную, является ли этот идентификатор элемента родительским идентификатором, который вы хотите использовать.

редактировать:

Попробуйте что-то вроде этого:

List myList = ((MyUI) UI.getCurrent()).peopleService.getItemList();
TempPeopleContainer container = new TempPeopleContainer(myList);
table.setContainerDataSource(container);
table.setParent(myList.get(1), myList.get(0));
Другие вопросы по тегам