У меня есть простая TreeGrid в рамках Vaadin.Когда я раскрываю узел в дереве с 50 или более дочерними объектами - исключение отчета javascript.И только первые 50 узлов отображаются правильно, вместо 51 узла я вижу первый, вместо 66 я вижу 16, вместо 107 - 7 и т. Д.
Я пробовал с Vaadin 12.0.0, 12.0.3,13.0.0.alpha2
Я запускаю его из Gradle с плагином 'com.devsoap.vaadin-flow' версия '1.0.0.RC6'
Вот простой пример для воспроизведения.
import com.vaadin.flow.component.treegrid.TreeGrid;
import com.vaadin.flow.data.provider.hierarchy.AbstractHierarchicalDataProvider;
import com.vaadin.flow.data.provider.hierarchy.HierarchicalQuery;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class MyTreeGrid extends TreeGrid<MyTreeGrid.Node> {
private static final int CHILD_SIZE = 200;
public MyTreeGrid() {
this.addHierarchyColumn(Node::getName);
setDataProvider(new AbstractHierarchicalDataProvider<MyTreeGrid.Node, Void>() {
@Override
public boolean isInMemory() {
return false;
}
@Override
public int getChildCount(HierarchicalQuery<MyTreeGrid.Node, Void> query) {
Object node = query.getParent();
if (node == null)
return 1;
if (node instanceof RootNode)
return CHILD_SIZE;
return 0;
}
@Override
public Stream<MyTreeGrid.Node> fetchChildren(HierarchicalQuery<MyTreeGrid.Node, Void> query) {
Node node = query.getParent();
if (node == null) {
return Stream.of(new RootNode(0));
} else {
Stream<Node> nodeStream = IntStream.range(1, CHILD_SIZE + 1).mapToObj(Node::new);
Stream<Node> copy = IntStream.range(1, CHILD_SIZE + 1).mapToObj(Node::new);
int size = copy.collect(Collectors.toList()).size();
System.out.println(size);
return nodeStream;
}
}
@Override
public boolean hasChildren(MyTreeGrid.Node node) {
if (node == null)
return true;
return node instanceof RootNode;
}
});
}
public static class Node {
private final int num;
public Node(int num) {
this.num = num;
}
public String getName() {
return "Node " + num;
}
}
public static class RootNode extends Node {
public RootNode(int num) {
super(num);
}
public String getName() {
return "RootNode";
}
}
}