SubReport의 사용
앞서 iReport에서 디자인한 jrxml 파일을 예로 들면 SubReport의 datasource의 이름을 subdata로 설정 하였다.
Multiformat-view를 이용하여 PDF 파일로 출력 하는 경우 Controller와 jasperreport-views.properties를 수정해야 한다.
부모 report file과 자식 report file은 WEB_INF\reports\ 폴더 내에 위치 시킨다.
ReportController.java
@Controller
public class ReportController {
@RequestMapping(value = "/reports/test.do")
public ModelAndView test(
@ModelAttribute(“testVO") TestVO testVO,
Map<String, Object> map, ModelMap model) throws Exception{
본인 프로젝트에 맞는 방법으로
쿼리를 실행하여 값을 리스트에 담는다
-Subreport용 datasource는 list2에 담는다.
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
List<Map<String,Object>> list2 = new ArrayList<Map<String,Object>>();
return JasperReportUtil.render("multiformat-view", list, list2, "pdf"); // render에 list, list2를 리턴한다.
}
public static class JasperReportUtil extends Exception {
private static final long serialVersionUID = 1L;
public static ModelAndView render(String templateId,
List<Map<String, Object>> list, List<Map<String, Object>> list2, String fmt) {
JRBeanCollectionDataSource src = new JRBeanCollectionDataSource(list);
JRBeanCollectionDataSource src2 = new JRBeanCollectionDataSource(list2);
ModelAndView mv = new ModelAndView();
mv.setViewName(templateId);
mv.addObject("format", fmt);
mv.addObject("datasource", src);
mv.addObject("subdata",src2); // iReport에서 설정한 이름과 같아야 한다.
return mv;
}
}
Jasperreports-views.properties
multiformat-view.(class)=org.springframework.web.servlet.view.jasperreports.JasperReportsMultiFormatView
multiformat-view.url=/WEB-INF/reports/파일명.jrxml // 부모 jrxml 파일명
multiformat-view.reportDataKey=datasource
multiformat-view.subReportDataKeys=subdata