1

Struts2で実行される Web アプリケーションにJasperReportsを統合しようとしています。struts2-jasperreports-plugin (2.3.15) を使用しています。

そのために、アクション メソッドとイメージ サーブレットのマッピングをstruts2.xmlに追加し、単純に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-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でレポートを編集していますが、グラフがデフォルトのテーマの 1 つを使用するレポートを作成すると、レポートは正しくコンパイルされ、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 を削除しない限り。catch ブロックのロガーは何もログに記録しないため、レポートのコンパイル中にJasperReports

Exception はスローされ ないようですが、 jasperファイルは作成されません。

WEB-INF/lib にjasperreports-chart-themes jar を入れました。バージョン 4.0.0 と 5.1.0 を試しましたが、常に同じエラーが発生します。

iReportでレポートのプレビューを表示すると、すべて正常に動作します。

カスタム チャート テーマを使用する前に何か不足していることがあれば教えてもらえますか?

4

1 に答える 1