1

ご存知のように、JasperReportsビューとSpringの統合を使用する場合、xml ファイル内のレポート データ キーは 1 つのキーだけを使用します。以下で説明します。しかし、複数のキーがある場合、実際には、マップに含まれるオブジェクトの数を判断できません。

これを解決するにはどうすればよいですか?

これは私のjasper-views.xmlです

<bean id = "toPdf"
class = "org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView"
p:url= "classpath:src/newpackage/tcoReport.jasper"
p:reportDataKey="dSource"
/>
4

1 に答える 1

0

独自の PdfView を実装することをお勧めします。

私はそれを示します:

public class JasperPdfView extends AbstractView {

public JasperPdfView(){
    setContentType("application/pdf");
}

@Override
protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response)
        throws Exception {
    final JasperPrint print = (JasperPrint)model.get("jasper_print");
    JasperExportManager.exportReportToPdfStream(print, response.getOutputStream());
}

}

ビューに渡す JasperReport オブジェクトを作成するサービスがあります。

@Override
public JasperPrint generate(ReportContext ctx) throws SQLException {
        Resource res = resourceLoader.getResource(ctx.getFile());
        JasperReport report = JasperCompileManager.compileReport(res.getInputStream());

        HashMap<String, Object> map = Maps.newHashMap();
        map.putAll(ctx.getParams());
        map.put("from", ctx.getFrom().toDate());
        map.put("to", ctx.getTo().toDate());
        JasperPrint print = JasperFillManager.fillReport(report, map, dataSource.getConnection());
        return print;
}

私のコントローラーは、サービスを呼び出して生成し、JasperReport をモデルに配置します。

@RequestMapping(value = "/{reportName}")
public void printReport(@PathVariable final String reportName, final ParameterForm form, final ModelMap model)
        throws SQLException {
    final ReportContext ctx = reports.get(reportName).build();
    ctx.setFrom(form.getFrom());
    ctx.setTo(form.getTo());
    ctx.getParams().put("customerId",form.getCustomerId());
    model.put("jasper_print", reportService.generate(ctx));
}

JapserPdfView は ContentNegotiatingViewResolver によって決定されます。

于 2012-09-11T20:09:35.243 に答える