Ваадин, 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));