Vir*_*ato 6 spring-mvc jasper-reports
我正在使用带有JasperReports的Spring MVC 3.0对Web应用程序进行原型设计.我已经使用Spring + Jfreechart + iText + Apache POI完成了报告应用程序,并且能够成功使用Spring提供的各个视图类来传输pdf,xls和图像.
这次我想尝试使用JasperReports,以便我可以在应用程序之外设计我的pdf,而不必担心知道底层api(是jfreechart,itext或poi).
问题
我有一个report1.jrxml文件,其中包含一个queryString标记,其中包含带有两个日期参数的查询.当我通过iReport测试报告时,它会编译并成功运行.这里没问题.
现在我正在阅读以下Spring文档中的JasperReports部分http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#view-jasper-报告 ,我试图让JasperReportsMultiFormatView正常工作,但有一件我不理解:
JasperReportMultiFormatView如何知道要连接的数据库(回想一下,我在报告中嵌入了查询)?
文档声明在视图中使用reportDataKey属性,但我不知道这是如何解决我的问题.
你如何传递参数?
可以做些什么
JaperReports提供了一组xxxManager对象,负责编译,过滤和导出报告.您可以创建一个实现Spring View接口的自定义类,并执行以下操作:
Connection connection;
ServletOutputStream servletOutputStream = response .getOutputStream();
InputStream reportStream = getServlet().getServletConfig().getServletContext().getResourceAsStream("/reports/report1.jasper");
response.setContentType("application/pdf");
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://localhost:
3306/flightstats?user=user&password=secret");
JasperRunManager.runReportToPdfStream(reportStream,
servletOutputStream, new HashMap(), connection);
connection.close();
servletOutputStream.flush();
servletOutputStream.close();
Run Code Online (Sandbox Code Playgroud)
我需要的
我需要完成上面那些利用Spring类的代码,比如JasperReportsPdfView,JasperReportsXlsView,甚至更好的JasperReportsMultiFormatView
总而言之,我需要能够将以下内容从我的控制器传递给jasper报告:
这是我所拥有的,输出是一个空白的PDF文档,我假设因为它不知道如何运行查询
@RequestMapping("/reports/**")
@Controller
public class ReportsController {
@RequestMapping(value ="/reports/usage/report", method = RequestMethod.GET)
public ModelAndView handleSimpleReportMulti(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("Made it here");
Map model = new HashMap();
//model.put("format", "pdf");
model.put("START_DATE", new String("09-12-2011"));
model.put("END_DATE", new String("09-17-2011"));
return new ModelAndView("report1", model);
}
}
Run Code Online (Sandbox Code Playgroud)
我找到了问题的答案.我已将上面的控制器更改为:
@RequestMapping(value ="/reports/usage/report/{format}", method = RequestMethod.GET)
public ModelAndView handleSimpleReportMulti(ModelMap modelMap, @PathVariable("format") String format) throws Exception {
//Map model = new HashMap();
modelMap.put("format", format);
modelMap.put("REPORT_CONNECTION", dataSource.getConnection());
modelMap.put("START_DATE", new String("09-12-2011"));
modelMap.put("END_DATE", new String("09-17-2011"));
return new ModelAndView("report1", modelMap);
}
Run Code Online (Sandbox Code Playgroud)
我已将view.properties更改为:
#report1(class)=org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView
report1(class)=org.springframework.web.servlet.view.jasperreports.JasperReportsMultiFormatView
report1.url=/WEB-INF/reports/report1.jasper
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助.
谢谢
| 归档时间: |
|
| 查看次数: |
8975 次 |
| 最近记录: |