Я использую Grails 1.3.5, SQL Server 2005, iReports 3.7.6, плагин Jasper 1.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'
В папке отчетов есть два файла, созданныхкогда создается и сохраняется новый отчет, т.е. report.jrxml и report.jasper.
При щелчке по значку PDF в IE или Firefox выдается ошибка сервера 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 отображается нормально.способ сделать это?
Моя вторая проблема связана с использованием подотчетов.Подотчет находится в той же папке, что и основной отчет.Но когда отчет выполняется из приложения, выдается следующее сообщение об ошибке:
[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
и назвал ее report1
и обновленный файл report1.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
!!!:)
Я проверил это в производственном режиме, и он отлично работает.Я не уверен, если это способ сделать это, но все другие возможные решения не сработали для меня.
Обратная связь будет очень полезна.