2009-11-19 5 views
1

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

나는 당신의 코드를 시험해 보았지만 아무 문제가 없었다.

보고서 쿼리를 채우지 않거나 데이터 소스를 보내지 않으면 인쇄 할 때 보고서가 항상 비어 있거나 인쇄되지 않습니다 ("데이터가없는 경우"변수에 따라 달라짐)

문제가있는 경우 "데이터 없음"변수를 Detail을 제외한 모든 섹션 인쇄로 설정하고 다른 모든 밴드에 메시지를 입력하십시오. 당신의 iReport를 사용하는 경우

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가 동일한 JasperReport 라이브러리 버전을 사용하는지 확인하십시오.

0

왜 런타임시 jrxml을 컴파일해야합니까? 당신의 iReport에서 컴파일 및 어쨌든 JasperReport jasperReport = (JasperReport) JRLoader.loadObject(is);


를 통해이 JasperReport 개체를 받고 봤어의 jrxml 파일이 생성되는 경우의 iReport에 컴파일을 시도하고 불만이있는 경우를 참조하십시오.

관련 문제