您的位置:首页 > 编程语言 > ASP

Struts2整合jasperreport html展示图片不显示的解决办法

2013-05-17 14:46 831 查看
最近用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目录中找不到图片的,图片肯定是写在内存中传递的,具体是怎么实现的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Struts jasperreport 报表
相关文章推荐