В приложении более 100 отчетов. Я хотел бы интегрировать их в большое веб-приложение.Отчеты о выходе сервлетов JasperReports
Я нашел эту идею здесь: http://jasperreports.sourceforge.net/sample.reference/webapp/index.html.
Итак, я хотел бы создать Servlet, который вернет форматы отчетов в формате pdf, html или xlsx. Я уже сделал это на примере для один Класс отчета. Кроме того, мой сервлет возвращает тип, который он получает из параметра.
Однако я не могу понять, как писать (с отображением и т. Д.) Для каждого класса отчетов. Как я могу избежать этого, используя те же сервлеты для разных отчетов (разные классы). В этом случае - MyDataExample.
Здесь:
public class ServletExample extends HttpServlet {
@Override
public void doGet(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException, IOException {
MyDataExample masterData = new MyDataExample(new ReportParameters(Long.valueOf(req.getParameter("id")), 2, DatabaseConnection.getConnection(), null));
JasperPrint print = masterData.build();
req.getSession().setAttribute(BaseHttpServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, print);
String outputType = req.getParameter("outputType");
Exporter exporter;
switch (outputType) {
case "html":
try {
PrintWriter out = resp.getWriter();
resp.setContentType("text/html");
req.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, print);
exporter = new HtmlExporter();
exporter.setExporterInput(new SimpleExporterInput(print));
SimpleHtmlExporterOutput output = new SimpleHtmlExporterOutput(out);
output.setImageHandler(new WebHtmlResourceHandler("/reports/image?image={0}"));
exporter.setExporterOutput(output);
exporter.exportReport();
} catch (JRException e) {
e.printStackTrace();
}
break;
case "pdf":
resp.setContentType("application/pdf");
exporter = new JRPdfExporter(DefaultJasperReportsContext.getInstance());
exporter.setExporterInput(new SimpleExporterInput(print));
try (OutputStream outputStreams = resp.getOutputStream()) {
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outputStreams));
exporter.exportReport();
} catch (JRException e) {
e.printStackTrace();
}
}
break;
case "xlsx":
resp.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
exporter = new JRXlsxExporter(DefaultJasperReportsContext.getInstance());
exporter.setExporterInput(new SimpleExporterInput(print));
try (OutputStream outputStream = resp.getOutputStream()) {
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outputStream));
SimpleXlsReportConfiguration configuration = new SimpleXlsReportConfiguration();
configuration.setOnePagePerSheet(false);
configuration.setWhitePageBackground(false);
exporter.setConfiguration(configuration);
exporter.exportReport();
} catch (JRException e) {
e.printStackTrace();
}
break;
default:
throw new RuntimeException("Unknown type selected");
}
}
}
как насчет использования другого параметра для класса отчета? – Wilson
@wilson вы могли бы привести пример? Я попытался, если (req.getParameter («class»). Равен ... затем один экземпляр() else another(). Но это не сработает. Если работа была выполнена правильно, но вывод был первым знаком для всех остальных – quento