TreeGrid相关

版本为14
在getChildCount设置断点,发现每次展开一个节点,会多次调用getChildCount这个方法,并且query.getParent()有时候是null,有时候是真正被点击的那个父结点,这导致点击父结点时,返回的ChildCount为1(Parent为null时),或者是真实的子结点个数(比如说12)
又在fetchChildrenFromBackEnd()方法的返回值进行断点,发现返回的数据正常,为12条.
最后的结果是展开都是同一个(对象地址相同)节点

这看起来像是getChildCount在获取被展开的父结点,query.getParent()==null时,返回1而导致的问题
然而为什么query.getParent()会偶尔是null?

HierarchicalDataProvider<FileModel, Void> provider = new AbstractBackEndHierarchicalDataProvider<FileModel, Void>() {

        @Override
        public boolean hasChildren(FileModel item) {
            return true;
        }

        @Override
        public int getChildCount(HierarchicalQuery query) {
            String parentPath = "";
            FileModel file = (FileModel) query.getParent();
            if (file != null) {
                if (file.getParentPath() == null || file.getParentPath().equals("")) {
                    parentPath = file.getName();
                } else {
                    parentPath += file.getParentPath() + "/" + file.getName();
                }
            }
            return fileDao.FolderChild(archiveId, parentPath, null, false).size();
        }

        @Override
        protected Stream<FileModel> fetchChildrenFromBackEnd(HierarchicalQuery query) {
            String parentPath = "";
            FileModel file = (FileModel) query.getParent();
            if (file != null) {
                if (file.getParentPath() == null || file.getParentPath().equals("")) {
                    parentPath = file.getName();
                } else {
                    parentPath += file.getParentPath() + "/" + file.getName();
                }
            }
            List<FileModel> list = fileDao.FolderChild(archiveId, parentPath, null, false);
            String finalParentPath = parentPath;
            list.forEach(i -> {
                i.setArchiveId(archiveId);
                i.setParentPath(finalParentPath);
            });
          return list.stream().limit(query.getLimit()).skip(query.getOffset());
        }
    };

18478528.png