Есть связанные сущности, напрмер, Document и Changes отношение OneToMany. В экране редактирования Document.edit есть таблица с элементами Changes. Есть необходимость пронумеровать список элементов в таблице. Решил сделать с помощью generateCell(Entity), но, судя по всему, этот метод вызывается несколько раз для каждого элемента сущности и простым счетчиком тут не обойтись. Не могли бы вы пояснить когда вызывается generateCell и какие изменения в эти вызовы вносят?
Мы не можем гарантировать что generateCell() вызовется в нужном порядке для формирования номеров строк. Можно написать такой счетчик, он будет выдавать позицию сущности в коллекции:
@Inject
private Table changesTable;
@Inject
private CollectionDatasource<Change, UUID> changesDs;
@Inject
private ComponentsFactory componentsFactory;
@Override
public void init(Map<String, Object> params) {
changesTable.addGeneratedColumn("num", new Table.ColumnGenerator<Change>() {
@Override
public Component generateCell(Change entity) {
int i = 0;
for (UUID uuid : changesDs.getItemIds()) {
i++;
if (uuid.equals(entity.getId()))
break;
}
Label label = componentsFactory.createComponent(Label.NAME);
label.setValue(i);
return label;
}
});
}