Grails jasper プラグインでサブレポートを使用したいので、この URL ( http://www.grails.org/plugin/jasper ) のマニュアルに従いました。これが私のコードです:
ドメインブック:
class Book {
static belongsTo = Library
Library library
String title
String author
String publisher
String category
static constraints={
title()
author()
publisher()
category()
}
}
ドメイン ライブラリ :
class Library {
static hasMany = [ books : Book ]
String name
String adresse
Date dateMaturity
static constraints = {
}
String toString()
{
return name
}
}
私の BookController には、次のものがあります。
def createReport = {
def books = Book.list()
chain(controller:'jasper',action:'index',model:[data:books],params:params)
}
私の LibraryController には、次のものがあります。
def createReport = {
def library = Library.list()
chain(controller:'jasper',action:'index',model:[data:library],params:params)
}
私の碧玉の部分は次のとおりです。
サブレポート ファイル: books.jasper (本のリストを取得) があります。
また、MasterReport : library.jasper (ライブラリのリストを取得)。
私の MasterReport(library) に、サブレポートを追加しました。ライブラリごとに、含まれている本のリストを表示したいと思います。ここに私のライブラリコードがあります:
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
...
<field name="books" class="java.util.Collection"/>
...
<subreport isUsingCache="true">
<reportElement x="0" y="25" width="437" height="100"/>
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{books})]]></dataSourceExpression>
<subreportExpression class="java.lang.String"><![CDATA[$P{SUBREPORT_DIR} + "books.jasper"]]>
</subreportExpression>
</subreport>
そして、私はこのエラーがあります:
エラー 500:プラグイン [jasper] でコントローラー [JasperController] のアクション [インデックス] を実行すると例外が発生しました: net.sf.jasperreports.engine.fill.JRExpressionEvalException: 式の評価中にエラーが発生しました: ソース テキスト: 新しい net.sf.jasperreports.engine.data .JRBeanCollectionDataSource($F{books})
例外メッセージ:ロールのコレクションの遅延初期化に失敗しました: bookshelf.Library.books、セッションまたはセッションが閉じられませんでした
ご協力ありがとう御座います。