我想将子报告与 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)
}
我的碧玉部分是:
我有一个 SubReport 文件: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] 的操作 [index] 导致异常:net.sf.jasperreports.engine.fill.JRExpressionEvalException:评估表达式时出错:源文本:新 net.sf.jasperreports.engine.data .JRBeanCollectionDataSource($F{books})
异常消息:未能延迟初始化角色集合:bookshelf.Library.books,没有会话或会话已关闭
谢谢你的帮助。