我正在使用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 - not found”而不是一个未找到的动作异常。 JasperReportAction类中的最后一个代码行创建一个HTML文件,其中包含一个与生成的图表相关联的文件夹,并且所有文件都按原样显示。
我希望有人可以告诉我在哪里可以找到生成的图表,或者我可以为他们指定名称。 任何帮助将不胜感激:)
提前致谢
答案 0 :(得分:2)
我终于解决了我的问题,混合了我在网上发现的各种信息,特别是了解如何配置struts2。
Jasper Reports使用一个名为ImageServlet的servlet来处理图像,所以我需要做的是:
注册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”。