Java 嘉士伯报告及;Struts2:自定义图表主题
我正在尝试将JasperReports集成到运行在Struts2上的web应用程序中。Java 嘉士伯报告及;Struts2:自定义图表主题,java,struts2,jasper-reports,jasper-plugin,Java,Struts2,Jasper Reports,Jasper Plugin,我正在尝试将JasperReports集成到运行在Struts2上的web应用程序中。 我正在使用struts2 jasperreports插件(2.3.15) 为此,我在struts2.xml中添加了action方法和image servlet的映射,并编写了一个action,它只需输入一个jrxml源文件并编译报告 下面是我在struts2.xml中添加的配置行 我使用JQuery加载调用该操作: $("#jasperReport").load("url/getJasperReport.ac
我正在使用struts2 jasperreports插件(2.3.15) 为此,我在struts2.xml中添加了action方法和image servlet的映射,并编写了一个action,它只需输入一个jrxml源文件并编译报告
下面是我在struts2.xml中添加的配置行 我使用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 dispatcher会给我以下错误: org.apache.struts2.dispatcher.dispatcher-处理请求期间发生异常:null java.lang.reflect.InvocationTargetException
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 即使尝试打开不使用自定义主题的报表,也会出现此错误。除非我移除主题罐。
在报告编译期间,似乎没有抛出JasperReports异常,因为catch块中的记录器没有记录任何内容,但是没有创建jasper文件 我在我的WEB-INF/lib中加入了jasperreports图表主题jar,我尝试了4.0.0和5.1.0版本,但我总是遇到同样的错误 当我在iReport中显示报告预览时,一切正常
有人能告诉我,在使用自定义图表主题之前,我是否遗漏了一些要做的事情吗?最后,我找到了问题所在。
它不是系统化的,但有时会出现ClassNotFoundException而不是InvocationTargetException 我只需要在我的webapplib文件夹中添加一些jar。我需要的是:
- 自定义主题jar(显然)
- jasperreports-chart-themes-5.1.0.jar(而不是4.0.0)
- castor-1.2.jar
castor库有更新的版本,但其他一些库(可能是jasperreports图表主题?)与1.2以上的版本不兼容。似乎类CastorException是在包org.exolab.castor.core.exceptions中搜索的,在较新版本中,该类已移动到包org.exolab.castor.xml您能发布代码和配置的相关部分吗?(action,web.xml,struts.xml)我编辑了这篇文章并添加了一些信息,我不知道为什么会出现异常,但是运行时编译是非常不鼓励的:“同样,不要在生产代码中使用它。当然,您应该提供编译过的模板,或者进行某种检查,以避免在每次请求时编译模板。”我的2美分:尝试调整您的代码,使其与教程中的代码相似,一旦它起作用,如有必要,开始定制。是的,我已经阅读了文档中的建议,但我的目的是允许用户稍后在webapp中上载和更改jrxml源代码,因此我需要重新编译。但我会尽量听从你的建议,谢谢:)
<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;
}
}
$("#jasperReport").load("url/getJasperReport.action",
{
"sourceFile": "source.jrxml",
"outFile" : "outFile",
"format" : "HTML",
});