我正在使用Grails 1.3.5,SQL Server 2005,iReports 3.7.6,Jasper Plugin 1.1.3。在我的GSP頁我已經給jasperReprt標籤爲:Grails - Jasper Plugin - 使用.jasper文件的1字節UTF-8序列錯誤的無效字節1
<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。
單擊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報告顯示正常時,錯誤不再拋出。
這是正確的方法嗎?
我的第二個問題是使用子報告。子報告與主報告位於同一文件夾中。但是,當報告從應用程序執行,下面的錯誤被拋出:
[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)
它沒有找到子報告。我該如何解決它?
謝謝。 Jay Chandran。
編輯: 我一直在尋找整個過程,但仍然找不到合適的解決方案。所以我做了一些試驗和錯誤。我發現,刪除report1.jasper
,並且在報告目錄中僅僅留下jasper.jrxml
就可以正常工作,就像我之前所說的那樣。
對於子報告的問題:它是給錯誤Could not load object from location : ./reports\report1sub_report.jasper
一些奇怪的原因,主要報告名稱report
漸漸追加到名稱sub_report.jasper
並正在尋找一個名爲report1sub_report.jasper
文件,所以我創建了一個子reports
文件夾下-folder並把它命名report1
和更新report1.jrxml文件
<subreportExpression class="java.lang.String"><![CDATA[$P{SUBREPORT_DIR} + "\\sub_report.jasper"]]></subreportExpression>
我不得不添加即使「SUBREPORT_DIR」參數有額外\\
斜槓如下所示,在路徑的末尾加上210個斜槓。
<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
!!! :)
我已經測試了這種生產模式,它工作正常。我不確定這是否是這樣做的,但所有其他可能的解決方案都不適合我。
反饋將非常有幫助。
感謝您解決字符編碼問題的解決方法,我仍在調查它適當的解決方案 – jneira 2011-11-04 13:58:20
我已選擇將編譯.jasper的目錄更改爲c \ windows \ temp以避免手動刪除文件。 – jneira 2011-11-04 14:04:36