最近用ireport5.0做了一个柱状图的报表,用ireport预览功能显示没问题。
但是用Struts2集成jasperreport(struts2仅仅用它的跳转功能),展示成html格式的时候,柱状图显示不出来。
在网上查了很多资料,做了一些总结。
解决办法如下:
1.在web.xml中添加
<!--JasperReport解决HTML显示图片不出来的问题-->
<servlet>
<servlet-name>ImageServlet</servlet-name>
<servlet-class>net.sf.jasperreports.j2ee.servlets.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ImageServlet</servlet-name>
<url-pattern>/image.servlet</url-pattern>
</servlet-mapping>
2.在Struts2的Action中,实例化jasperPrint对象,并转向到显示界面。(由于需要jsp页面的分页功能)
if (jasperPrint == null) {
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(reprortList);
try {
jasperPrint = JasperFillManager.fillReport(reportPath,reportPams,ds);
} catch (JRException e) {
e.printStackTrace();
}
}
request.setAttribute("jp", jasperPrint);
request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
3.在jsp页面中指定,图片的路径
<% //用request访问页面,
int pageIndex = 0;
int lastPageIndex = 0;
JasperPrint jasperPrint=null;
jasperPrint = (JasperPrint)request.getAttribute("jp");
.。。。。。。。。
%>
<%
JRHtmlExporter exporter = new JRHtmlExporter();
//设置分页
exporter.setParameter(JRExporterParameter.PAGE_INDEX,Integer.valueOf(pageIndex));
//设置导出对象
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
//设置图片请求URI
String imageServletUrl = "/image.servlet?image=";
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, request.getContextPath() + imageServletUrl);
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);//输出方式
exporter.exportReport();
out.flush();
%>
启动jboss,柱状图的图片能显示出来了。
但有几个问题,仍不明白。
我最早的思路是,把柱状图生成的图片保存到服务器端目录中,然后页面显示的时候,从服务器端取出图片。
String imageDIR = request.getSession().getServletContext().getRealPath("images/reportImages");
exporter.setParameter(JRHtmlExporterParameter.IMAGES_DIR_NAME,imageDIR);//设置图片文件存放路径,此路径为服务器上的绝对路径
//设置图片请求URI
String imageURI = request.getContextPath() + "/images/reportImages/";
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, imageURI);
图片能保存到服务器段,但是显示页面无法找到图片,并且Struts2报错,就是Struts2试图用Action去打开图片的路径。
如果这种思路正确,从服务器段访问图片的路径该怎么设置?
另外一个
在web.xml中配置的net.sf.jasperreports.j2ee.servlets.ImageServlet,这个servlet用来指定报表显示界面中的图片的访问路径的
在web目录中找不到图片的,图片肯定是写在内存中传递的,具体是怎么实现的