2013-06-19 42 views
2

我使用jasperreports-plugin for struts2。struts2-jasperreports-plugin图表图像丢失

我已经使用iReport创建了一些报告。当我以HTML以外的任何格式导出报告时,报告都会正确生成。但是,当我尝试导出它在HTML中,浏览器没有找到任何图像。

对于没有图表的报告,这不是一个大问题,在他们的“px”图像丢失。由于它是一个静态图像,它不是一个很大的问题,我发现了一个快速的解决方法,也许以后我会尝试强制导出参数不使用图像来填充空格。

我真正的问题是当我尝试生成包含图表的报告时。浏览器找不到任何生成的图像。

我想知道发生了什么问题,或者至少如果生成的图像存储在临时文件夹中以及在哪里。

这里是我的struts.xml操作定义:

<package name="jasperreport" namespace="/reports" extends="jasperreports-default"> 
     <action name="myJasperTest" class="[...]JasperReportAction" method="getTestReport"> 
      <result name="success" type="jasper" > 
      <param name="location">/WEB-INF/jasper/${outFile}</param> 
      <param name="connection">sqlConnection</param> 
      <param name="reportParameters">reportParams</param> 
      <param name="format">${format}</param> 
     </result> 
     </action> 
</package> 

我的行动JasperReportAction.java:

public class JasperReportAction extends ActionSupport { 
    //various initialization..getter, setters.. 

    public String getTestReport() { 
     try { 
      JasperCompileManager.compileReportToFile(sourceFile, outFile); 

      //test to see a generated file 
      JasperReport report = JasperCompileManager.compileReport(sourceFile); 
      JasperPrint print = JasperFillManager.fillReport(report, new HashMap<String, Object>(), sqlConnection); 
      JasperExportManager.exportReportToHtmlFile(print, "/home/user/output.html"); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return ERROR; 
     } 
     return SUCCESS; 
    } 
} 

我也有我的struts.xml中避免异常增加一个动作当生成的报告请求url为像“/ images/px”这样的图像而没有高度张力时找不到动作:

<package name="px" namespace="/images" extends="struts-default"> 
    <action name="*"> 
     <result>/images/{1}</result> 
    </action> 
</package> 

至少在这个我得到一个“404 - 找不到”,而不是一个没有发现异常的行动。 JasperReportAction类中的最后一行代码行使用生成的图表创建了一个带有关联文件夹的HTML文件,并且所有代码都按照它的显示方式显示。

我希望有人能告诉我在哪里可以找到生成的图表,或者如果我可以为他们指定一个名称。 任何帮助,将不胜感激:)提前

回答

2

感谢我终于解决了我的问题,我混合发现的各种信息,在线和expecially更好地理解如何配置Struts2的。

Jasper报表使用称为ImageServlet来处理图像的servlet,所以我需要做的是:

  1. 注册碧玉报告ImageServlet在Tomcat中
  2. 配置Struts来未请求映射到ImageServlet付诸行动
  3. 修改struts.xml中的作用,使之使用ImageServlet

注册ImageServlet (Tomcat中的web.xml)

<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>/servlets/image</url-pattern> 
</servlet-mapping> 

配置的Struts(以支柱。XML)

<constant name="struts.action.excludePattern" value="/servlets/image*" /> 

修改动作(在struts.xml中)

<package name="jasperreport" namespace="/reports" extends="jasperreports-default"> 
    <action name="myJasperTest" class="[...]JasperReportAction" method="getTestReport"> 
     <result name="success" type="jasper" > 
     <param name="location">/WEB-INF/jasper/${outFile}</param> 
     <param name="connection">sqlConnection</param> 
     <param name="reportParameters">reportParams</param> 
     <param name="format">${format}</param> 

     <param name="imageServletUrl">/servlets/image?image=</param> 
    </result> 
    </action> 
</package> 

没有必要在struts.xml中我先补充包 “PX”。