2

Grails 1.3.5、SQL Server 2005、iReports 3.7.6、JasperPlugin1.1.3を使用しています。私のGSPページでは、jasperReprtタグを次のように指定しています。

<g:jasperReport jasper="report1" format="PDF">
<input type="hidden" name="test_id" id="test_id"/>
<input type="hidden" name="order_no" id="order_no" />   
</g:jasperReport>

開発のために、Config.groovyで指定しました

jasper.dir.reports = './reports'

新しいレポートが作成および保存されるときに、reportsフォルダーに作成される2つのファイル、つまりreport.jrxmlとreport.jasperがあります。

IEまたはFirefoxでPDFアイコンをクリックすると、500サーバーエラーがスローされ、以下はスタックトレースです。

[2010-11-27 01:13:14.998] ERROR groovy.grails.web.errors.GrailsExceptionResolver Invalid byte 1 of 1-byte UTF-8 sequence. com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence. at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:684) at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:554) at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1742) at

しかし、を削除するreport1.jasperと、PDFアイコンをクリックしてもエラーがスローされなくなり、PDFレポートが正常に表示されます。

これは正しい方法ですか?

  • 私の2番目の問題は、サブレポートの使用に関するものです。サブレポートはメインレポートと同じフォルダにあります。ただし、アプリケーションからレポートを実行すると、次のエラーがスローされます。

    [2010-11-27 01:30:27.556] ERROR groovy.grails.web.errors.GrailsExceptionResolver Could not load object from location : ./reports\report1sub_report.jasper net.sf.jasperreports.engine.JRException: Could not load object from location : ./reports\urine_routinepatient_details_sub_report.jasper at net.sf.jasperreports.engine.util.JRLoader.loadObjectFromLocation(JRLoader.java:262) at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluateReport(JRFillSubreport.java:301) at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluateSubreport(JRFillSubreport.java:327)

サブレポートが見つかりません。どうすれば修正できますか?

ありがとうございました。ジェイチャンドラン。

編集: 私はこの間ずっと検索してきましたが、それでも適切な解決策を見つけることができませんでした。だから私はいくつかの試行錯誤をしました。前に言ったように、レポートディレクトリを削除report1.jasperしてそのままにしておくと、問題なく機能することがわかりました。jasper.jrxml

サブレポートの問題の場合:エラーが発生していましCould not load object from location : ./reports\report1sub_report.jasperた奇妙な理由で、メインレポート名reportが名前に追加され、名前の付いsub_report.jasperたファイルを探していましたreport1sub_report.jasper

そこで、フォルダーの下にサブフォルダーを作成し、reports名前を付けてreport1report1.jrxmlファイルを更新しました。

<subreportExpression class="java.lang.String"><![CDATA[$P{SUBREPORT_DIR} + "\\sub_report.jasper"]]></subreportExpression>

\\以下に示すように、「SUBREPORT_DIR」パラメーター\\のパスの最後にスラッシュが含まれていても、余分なスラッシュを追加する必要がありました。

<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
    <defaultValueExpression><![CDATA["F:\\Workspace\\SpringSource2.5.0\\GrailsProjec\\reports\\report1\\"]]></defaultValueExpression>
</parameter>

最後にあることに注意してください\\。なぜ追加されなかったのかわかりません!

別の方法は、サブレポート名をからsub_report.jasper に変更することreport1sub_report.jasperでした。:)

これを本番モードでテストしましたが、正常に動作します。これがそれを行う方法であるかどうかはわかりませんが、他のすべての可能な解決策は私にとってはうまくいきませんでした。

フィードバックは非常に役立ちます。

4

3 に答える 3

0

これMalformedByteSequenceExceptionは、文字エンコードの競合が原因で発生します。どこでも、WindowsのWin-1252(ISO-8859-1に類似)の代わりにUTF-8を使用することをお勧めします。

Jasperのetc/ireport.confファイルで、を次のように変更しますdefault_options

default_options="-J-Dfile.encoding=UTF-8 -J-Xms24m -J-Xmx64m"

(ここXmsで、Xmxは無関係のメモリ設定です。その構成エントリにデフォルト設定がある場合は、それらを追い越すことができます。それ以外の場合は、そのままにします。)

別の構成については、このフォーラムスレッドを参照してください。

\サブレポートのエラーについては、おそらく間違っているバックスラッシュを見てください。

于 2010-11-27T17:43:37.470 に答える
0

編集: http://grails.org/plugin/jasper#faqTabに役立つ可能性のある2つの問題に関する情報がいくつかあり ます

サブレポートディレクトリに関連する問題の1つを解決できることを願っています。問題は、プラグイン コードが SUBREPORT_DIR をメイン レポートの名前を含む完全なファイル パスに設定することです。ただし、コードはユーザーが指定したパラメーターを同じ名前で尊重するため、このパラメーターに null 以外の値を入力すると、プラグインはそれを使用します。

たとえば、jasper コントローラーを直接チェーンすると、次のことができます。

def renderAs(data,format) {
    def reportParams=params.clone()
    reportParams["_format"]=reportParams["_format"]?:"${format.toUpperCase()}"
    reportParams["SUBREPORT_DIR"]=CH.config.jasper.dir.reports+"/"
    chain(controller:'jasper',action:'index',model:[data:[]+data],params:reportParams)
}

あなたのシナリオでは、(醜い)オプションは、SUBREPORT_DIRという名前の非表示の入力を作成し、目的の値を指定することです。他の方法でパラメータを埋めます。

編集: もう 1 つの厄介な問題は、メイン レポートとコンパイルされたサブレポートをどこに配置する必要があるかということです。

  • run-app を使用してアプリを実行すると、grails アプリのルートにある CH.config.jasper.dir.reports(reportDir) と同じ名前のフォルダーにすべてを配置すると機能します。
  • しかし、戦争を展開したい場合は、主要なレポートを戦争ファイルのルートにあるフォルダー reportDir に配置し、コンパイルされたサブレポートを WEB-INF/classes/reportDir に配置する必要があります。

すべてのファイルを grailsApp/reports に保持し、war grails タスクの適切なフォルダーにリソースをコピーすることにしました。私のBuildConfig.groovyに追加しました(reportDirは「レポート」です):

grails.war.resources = { stagingDir,args ->
    def classpathDir="${stagingDir}/WEB-INF/classes"
    copy(toDir:"${stagingDir}/reports") {
        fileset(dir:"reports",includes:"**")
    }
    copy(toDir:"${classpathDir}/reports") {
        fileset(dir:"reports",excludes:"**.jrxml")
    }
} 

それが役に立てば幸い。

于 2011-11-04T13:53:38.323 に答える
0

ここでバージョンの競合があると思います。iReport は JRXML ファイルを保存し、それらを自動的に .jasper にコンパイルするようです。Grails Jasper プラグインがコンパイル バリアントを検出し、それで問題が発生します。そのため、ireport でコンパイル済み出力を無効にしてみてください。

Grails Jasper プラグイン 1.1.3 は内部で Jasper 3.7.4 を使用し、使用される ireport は 3.7.6 です。

サブレポートについて:わかりません。

于 2010-11-27T16:24:09.877 に答える