我正在尝试将 JasperReports 集成到运行在 Struts2 上的Web应用程序中。
我正在使用 struts2-jasperreports-plugin(2.3.15)。
为此,我在 struts2.xml 中添加了action方法和图像servlet的映射,并且我编写了一个简单地输入 jrxml的动作源文件并编译报告。
以下是我在 struts2.xml
中添加的配置行<package name="jasperreport" namespace="/jasperreports" extends="jasperreports-default">
<action name="getJasperReport" class="....JasperReportAction" method="getJasperReport">
<result name="success" type="jasper" >
<param name="location">jasper/tmp/${outFile}</param>
<param name="format">${format}</param>
<param name="imageServletUrl">/servlets/image?image=</param>
</result>
</action>
</package>
<constant name="struts.action.excludePattern" value="/servlets/image*" />
并在我的 web.xml 中添加了servlet映像的映射:
<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>
此处报告了操作方法:
public class JasperReportAction extends ActionSupport {
private java.sql.Connection sqlConnection;
private String sourceFile;
private String outFile;
private String format;
private String reportName;
private String outputName;
public JasperReportAction() {
//initialize the connection...
}
//getters and setters..
public String getJasperReport() {
try {
String reportPath = "jasper/" + reportName;
JasperCompileManager.compileReportToFile(reportPath,"jasper/tmp/" + outputName + ".jasper");
}
catch(Exception e) {
logger.log("getJasperReport", e);
return ERROR;
}
return SUCCESS;
}
}
我用JQuery加载调用该动作:
$("#jasperReport").load("url/getJasperReport.action",
{
"sourceFile": "source.jrxml",
"outFile" : "outFile",
"format" : "HTML",
});
我正在使用 iReports 5.1.0 编辑我的报告,如果我创建一个报告,其中图表使用其中一个默认主题,则报告会正确编译并显示在我的Web应用程序中。
我尝试使用自定义模板,我已创建它并使用 iReport 导出jar,最后将主题jar放在我的WEB-INF / lib文件夹下。
当我尝试从我的应用程序检索报告时, Struts 调度程序给出了以下错误:
org.apache.struts2.dispatcher.Dispatcher - 处理请求期间发生异常:null java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) .......
即使我尝试打开不使用自定义主题的报表,也会出现此错误。除非我删除主题jar。
似乎在报告编译期间没有抛出 JasperReports 异常,因为catch块中的记录器没有记录任何内容,但是没有创建 jasper 文件。 / p>
我已经在我的WEB-INF / lib中添加了 jasperreports-chart-themes jar,我尝试过版本4.0.0和5.1.0但是我总是得到同样的错误。< / p>
当我在 iReport 中显示报告预览时,一切正常。
在使用自定义图表主题之前,有人可以告诉我是否遗漏了某些事情吗?
答案 0 :(得分:0)
最后我发现了问题所在。
它不是系统的,但有时而不是 InvocationTargetException 我有一个 ClassNotFoundException 。
我只需要在我的webapp lib 文件夹中添加一些jar。我需要的是:
有一些较新版本的castor库,但是其他一些库(可能是jasperreports-chart-themes?)与1.2之前的版本不兼容。似乎在 org.exolab.castor.core.exceptions 包中搜索了类 CastorException ,在较新版本中已将其移至包 org。 exolab.castor.xml 强>