我有一个
my_report.jasper
,其中包含 resourceBundle="translations"
。 jasper 和 Translation.properties 位于同一文件夹中,并且它在 jaspersoft studio 中工作(我能够正确地看到定义的翻译。
我正在将此报告集成到具有以下结构的 springboot 应用程序中:
src/main/java/my_package
MyCodeThatCreatesTheReport.java
src/main/resources/reports
my_report.jasper
translations.properties
translations_es.properties
translations_en.properties
translations_hu.properties
我正在创建报告:
Map<String, Object> jasperParams = new HashMap<>();
ResourceBundle resourceBundle = ResourceBundle.getBundle("reports.translations");
jasperParams.put(JRParameter.REPORT_RESOURCE_BUNDLE, resourceBundle);
/* Load the Jasper Report file */
File file = ResourceUtils.getFile("src/main/resources/reports/my_report.jasper");
jasperReport = (JasperReport) JRLoader.loadObjectFromFile(file.getAbsolutePath());
MyClassBean myClassBean = new MyClassBean();
JRDataSource dataSource = new JRBeanCollectionDataSource(List.of(myClassBean));
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, jasperParams, dataSource);
返回以下错误,因为它没有找到translation.properties:
java.util.MissingResourceException: Can't find bundle for base name idioma, locale en_US
将 jasper 文件从
resourceBundle="translations"
更改为 resourceBundle="reports/translations"
允许我从 springboot 创建报告,但随后我失去了从报告到翻译的访问权限。
为什么使用
resourceBundle
功能时fillReport
没有更新?
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, -->jasperParams<--, dataSource);
明显DIY类
ResourceUtils
的使用是可疑的。
你可以这样做:
URL file = MyCodeThatCreatesTheReport.class.getResource("/reports/my_report.jasper");
jasperReport = (JasperReport) JRLoader.loadObject(file);
由于我没有看到任何其他问题,也许这导致了错误。 由于您不使用
package
来表示 MyCodeThatCreatesTheReport
,因此当工作目录更改时,可能会导致 ResourceUtils
失败。