FileResolver
已被弃用,有利于net.sf.jasperreports.repo.RepositoryService
实施。
有一个名为的内置实现net.sf.jasperreports.repo.FileRepositoryService
这大致相当于已弃用的net.sf.jasperreports.engine.util.SimpleFileResolver
.
存储库服务注册为JasperReportsContext
扩展。
这可以在 jasperreports_extension.properties 文件中完成,如下所示:
net.sf.jasperreports.extension.registry.factory.file.repository=net.sf.jasperreports.repo.FileRepositoryServiceExtensionsRegistryFactory
net.sf.jasperreports.extension.file.repository.root=/path/to/repository
net.sf.jasperreports.extension.registry.factory.persistence=net.sf.jasperreports.repo.FileRepositoryExtensionsRegistryFactory
注册扩展也可以通过以编程方式创建JasperReportsContext
对象,然后使用它来填充报告:
SimpleJasperReportsContext context = new SimpleJasperReportsContext();
FileRepositoryService fileRepository = new FileRepositoryService(context, "/path/to/repository", false);
context.setExtensions(RepositoryService.class, Collections.singletonList(fileRepository));
context.setExtensions(PersistenceServiceFactory.class, Collections.singletonList(FileRepositoryPersistenceServiceFactory.getInstance()));
JasperPrint jasperPrint = JasperFillManager.getInstance(context).fill(jasperReport, params);
如果您需要实现自定义存储库服务,您可以采取FileRepositoryService
作为参考。你可能想要实施StreamRepositoryService
并注册PersistenceService
s(如文件存储库持久化服务工厂 https://github.com/TIBCOSoftware/jasperreports/blob/master/jasperreports/src/net/sf/jasperreports/repo/FileRepositoryPersistenceServiceFactory.java).
如果您需要做的是相对于报告的资源路径,您还可以查看JRFiller 方法 http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/fill/JRFiller.html#fill-net.sf.jasperreports.engine.JasperReportsContext-net.sf.jasperreports.engine.fill.JasperReportSource-java.util.Map-需要一个JasperReportSource
争论。传递这样的对象意味着自动解析相对于报表的报表资源引用(假设存储库服务基于以下方式实现资源查找):RepositoryContext
).