【问题标题】:struts2-jasperreports-plugin chart images missingstruts2-jasperreports-plugin 图表图像丢失
【发布时间】:2013-06-26 22:39:20
【问题描述】:

我正在为 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 中添加了一个操作,以避免在生成的报告请求像“/images/px”这样的图像的 url 时没有找到操作的异常:

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

至少有了这个我得到一个“404 - 未找到”而不是一个动作未找到异常。 JasperReportAction 类中的最后一行代码创建了一个 HTML 文件,其中包含与生成的图表相关联的文件夹,并且所有内容都按应有的方式显示。

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

提前致谢

【问题讨论】:

    标签: java html struts2 charts jasper-reports


    【解决方案1】:

    我终于解决了我的问题,混合了我在网上找到的各种信息,并特别了解如何更好地配置struts2。

    Jasper Reports 使用一个名为 ImageServlet 的 servlet 来处理图像,所以我需要做的是:

    1. 在 Tomcat 中注册 Jasper Reports ImageServlet
    2. 将 Struts 配置为不将对 ImageServlet 的请求映射到操作中
    3. 修改struts.xml中的action,使其使用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(在 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”包是不需要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-29
      • 2011-03-22
      相关资源
      最近更新 更多