使用 JasperFillManager.fillReport 时,resourceBundle 值不正确

问题描述 投票:0回答:1

我有一个

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);
java spring-boot jasper-reports
1个回答
0
投票

明显DIY类

ResourceUtils
的使用是可疑的。 你可以这样做:

URL file = MyCodeThatCreatesTheReport.class.getResource("/reports/my_report.jasper");
jasperReport = (JasperReport) JRLoader.loadObject(file);

由于我没有看到任何其他问题,也许这导致了错误。 由于您不使用

package
来表示
MyCodeThatCreatesTheReport
,因此当工作目录更改时,可能会导致
ResourceUtils
失败。

© www.soinside.com 2019 - 2024. All rights reserved.