Vaadin TreeGrid结合FileSystemDataProvider无法显示文件目录结构如何解决?
Vaadin TreeGrid 空白问题排查方案
核心错误原因(最高概率)
你当前的代码未给TreeGrid配置任何显示列,TreeGrid不会自动生成列,即使数据加载成功也会显示空白,这是最常见的问题。
其他可能的问题排查项
- 构造参数配置错误:
FilesystemData构造方法的第二个参数为是否展示普通文件,你当前传值为false,意味着只会加载目录,如果根目录下无可读子目录就会显示空白,若需要同时展示文件和文件夹,将该参数改为true即可。 - 文件读取权限不足:操作系统对用户主目录下的部分隐藏目录、系统目录会设置访问限制,若程序无对应目录的读取权限,会跳过加载该目录内容,若根目录下所有内容都无读取权限就会显示空白,可以先指定一个确认有读权限的测试目录验证是否为权限问题。
- 版本不兼容:
filesystemdataprovider 3.0.0官方适配版本为Vaadin 14,Vaadin 21的部分API存在变动,可能导致数据提供器无法正常工作,可以尝试升级数据提供器到适配Vaadin 21的版本,或临时降级Vaadin到14 LTS版本验证兼容性。 - 泛型不匹配:声明
TreeGrid时必须指定泛型为File,如果泛型不匹配会导致数据绑定失败,显示空白。
修复后的完整示例代码
// 声明泛型为File的TreeGrid TreeGrid<File> tree = new TreeGrid<>(); // 手动添加展示列,缺失该步骤会直接导致空白 tree.addColumn(File::getName).setHeader("名称"); tree.addColumn(file -> file.isDirectory() ? "文件夹" : "文件").setHeader("类型"); tree.addColumn(File::length).setHeader("大小(字节)"); String path = System.getProperty("user.home"); File rootFile = new File(path); // 第二个参数传true同时展示文件和文件夹,仅展示目录可保留false FilesystemData root = new FilesystemData(rootFile, true); FilesystemDataProvider fileSystem = new FilesystemDataProvider(root); tree.setDataProvider(fileSystem); add(tree);
内容的提问来源于stack exchange,提问作者MAVERICK1985
相关产品推荐
相关产品推荐

