Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 嘉士伯报告及;Struts2:自定义图表主题_Java_Struts2_Jasper Reports_Jasper Plugin - Fatal编程技术网

Java 嘉士伯报告及;Struts2:自定义图表主题

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

我正在尝试将JasperReports集成到运行在Struts2上的web应用程序中。
我正在使用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",           
 });