Я хотел бы использовать подотчеты с плагинами 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 (библиотеке) я добавил подотчет, и для каждой библиотеки я хотел бы показать список книг, которые он содержит; вот код моей библиотеки:
<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: Выполнение действия [index] контроллера [JasperController] в плагине [jasper] вызвало исключение: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Ошибка оценки выражения: Исходный текст: новый net.sf.jasperreports.engine.data.JRBeanCollectionDataSource ($ F {} книги)
Сообщение об исключении: не удалось лениво инициализировать коллекцию ролей: bookshelf.Library.books, ни один сеанс или сеанс не был закрыт
Спасибо за помощь.