2009-11-19 6 views
1

I создание двигатель отчета с JasperReport. Пока все работает нормально, но у меня мало понимания. В моем коде я пытаюсь скомпилировать файл шаблона и возвращать объект JasperReport, и если компиляция не удалась, скомпилируйте другой файл и верните сообщение об ошибке. Но по какой-то причине это не работает. Вот мой код:JasperReport исключение печать

/** 
* Generates JasperPrint object from the Template file 
* @param Template File Name (String) 
* @param Parameters (Map<String, Object>) 
* @param Collection of Value Objects (Collection, List, ArrayList) 
* @return JasperPrint 
*/ 
private JasperPrint getJRPrint(String tmpltFileLocation, Map<String, Object> params, JRBeanCollectionDataSource dataSource) { 
    JasperPrint jrPrint = null; 

    log.info("ReportEngine: compiling " + tmpltFileLocation); 

    try { 
     JasperReport jasperReport = JasperCompileManager.compileReport(tmpltFileLocation); 
     jrPrint = JasperFillManager.fillReport(jasperReport, params, dataSource); 
    } catch (JRException ex) { 
     ex.printStackTrace(); 
     return getErrorJRPrint(ex); 
    } 

    return jrPrint; 
} 

private JasperPrint getErrorJRPrint(Exception ex) { 
    JasperPrint errJrPrint = null; 
    Map<String, Object> errParams = new HashMap<String, Object>(); 
    errParams.put("errorMessage", ex.getMessage()); 

    try { 
     JasperReport jasperReport = JasperCompileManager.compileReport(reportFolderName + "errReport.jrxml"); 
     errJrPrint = JasperFillManager.fillReport(jasperReport, errParams); 
    } catch (Exception ex2) { 
     ex2.printStackTrace(); 
    } 

    return errJrPrint; 
} 

Шаблон файл ошибки есть (я попытался удалить его, и он жалуется, что файл отсутствует, так что он может видеть). В моем файле шаблона я просто печатаю сообщение об ошибке, а также пытаюсь напечатать некоторый статический текст, но он не работает. В чем может быть проблема?

+0

Вы решили проблему? – Bozho

ответ

1

Я пробовал ваш код и ничего плохого в этом не делал.

В отчете вы печатаете, если вы не заполнить запрос отчета или отправить источник данных, отчет всегда будет пустым или не печатается (в зависимости от того, что вы сделали вы установили «При отсутствии данных» переменная)

Если это проблема, установите для параметра «Когда нет данных» значение «Печать всех разделов, кроме« Детали », и поместите свое сообщение в любую другую группу.

Это переменная:

jasperReport.WHEN_NO_DATA_TYPE_BLANK_PAGE 
    jasperReport.WHEN_NO_DATA_TYPE_NO_PAGES 
    jasperReport .WHEN_NO_DATA_TYPE_ALL_SECTIONS_NO_DETAIL 

его легче изменить его, если вы используете IReport.

Примечание. Если вы создаете отчет с помощью iReport, убедитесь, что iReport использует те же версии библиотек JasperReport.

0

Зачем вам нужно скомпилировать jrxml во время выполнения? Вы пробовали его компиляцию в иРепорте и получать объект JasperReport В любом случае с помощью
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(is);

, если файл jrxml генерируется, попробуйте скомпилировать его в иРепорте и посмотреть, если у него есть какая-либо жалоба.

Смежные вопросы