Jasper сообщает об ошибке локали

Я использую инструмент iReport 5.0.1 для создания отчетов Jasper, мои отчеты правильно компилируются, но когда я нажимаю на кнопку предварительного просмотра, выдается следующее сообщение об ошибке:

Описание ошибки:

 Filling report...
  Locale: English (United States)
  Time zone: Default
    Error filling print... Can't find bundle for base name Report_en_US, locale en_US 
java.util.MissingResourceException: Can't find bundle for base name Report_en_US, locale en_US  
at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1427)      
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1250)      
at java.util.ResourceBundle.getBundle(ResourceBundle.java:952)      
at net.sf.jasperreports.engine.util.JRResourcesUtil.loadResourceBundle(JRResourcesUtil.java:660) 
at net.sf.jasperreports.engine.util.JRResourcesUtil.loadResourceBundle(JRResourcesUtil.java:598)     
at net.sf.jasperreports.engine.fill.JRFillDataset.loadResourceBundle(JRFillDataset.java:570)    
at net.sf.jasperreports.engine.fill.JRFillDataset.setParameterValues(JRFillDataset.java:605)  
at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1257)     
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:877)      
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:841)     
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:88)     
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:653)    
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:569)   
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:915)    
at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:928)      
at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572)      
at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997)  
Print not filled. Try to use an EmptyDataSource...

Я использую следующий код Java для создания отчета:

InputStream input = new FileInputStream(request.getRealPath(compiledTemplate)); 

        Map<String,Object> parameters = new HashMap<String,Object>();
        Locale locale = (Locale)request.getSession().getAttribute(GFDBConstants.WW_TRANS_I18N_LOCALE);
        System.out.println("locale is ******" +"" + locale);
        ResourceBundle rbundle = ResourceBundle.getBundle("Report", locale);
        parameters.put(JRParameter.REPORT_RESOURCE_BUNDLE, rbundle);
        System.out.println("Resource Bundle is ********" +rbundle);
        parameters.put(JRParameter.REPORT_LOCALE, locale);
        parameters.put("CONTEXT",request.getServletContext().getRealPath("/"));
        JasperPrint print = JasperFillManager.fillReport(input, parameters, jrBeanCollectionDataSource);        
        ByteArrayOutputStream outputByteStream = new ByteArrayOutputStream();

        JRCsvExporter csvExporter = new JRCsvExporter(); 
        csvExporter.setParameter(JRCsvExporterParameter.JASPER_PRINT, print); 
        csvExporter.setParameter(JRCsvExporterParameter.OUTPUT_STREAM, outputByteStream);
        System.out.println("After report generated successfully");
        csvExporter.setParameter(JRCsvExporterParameter.FIELD_DELIMITER, ","); 
        csvExporter.setParameter(JRCsvExporterParameter.RECORD_DELIMITER, "\n");         
        csvExporter.setParameter(JRCsvExporterParameter.IGNORE_PAGE_MARGINS, true); 
        System.out.println("\n successfully generated");
        csvExporter.exportReport(); 
        input.close();
        HttpServletResponse response = ServletActionContext.getResponse();
        response.setContentType("application/csv");
        response.setHeader("Content-Disposition", "attachment;filename=" + csvFileName);

        ServletOutputStream outStream = response.getOutputStream();
        outStream.write(outputByteStream.toByteArray());
        outStream.flush();
        outStream.close();

2 ответа

Если вы не уверены в пути загрузки пакета ресурсов, попробуйте ниже приведенный код

File file = new File("your resource file locaiton");
URL[] urls = {file.toURI().toURL()};
ClassLoader loader = new URLClassLoader(urls);
ResourceBundle rb = ResourceBundle.getBundle("Resource", Locale.getDefault(), loader);

Убедитесь, что вы создали файл свойств с именем Report_en_US.properties, если у вас нет файла Report_en_US.properties в том же месте

Второй вариант загрузки ресурсного комплекта без локального. будет загружен пакет ресурсов по умолчанию Report.properties

 ResourceBundle rbundle = ResourceBundle.getBundle("Report");
Другие вопросы по тегам