目录
1.1、错误描述
今天在使用Jasper Studio报表工具制作一个报表界面,制作完成之后,配置了数据源,然后点击Preview预览,预览过程中报了一个错误,如下所示:
net.sf.jasperreports.engine.JRException: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: ((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("")
at com.jaspersoft.studio.editor.preview.view.control.ReportController.fillReport(ReportController.java:553)
at com.jaspersoft.studio.editor.preview.view.control.ReportController$1.run(ReportController.java:446)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: ((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("")
at net.sf.jasperreports.engine.fill.JREvaluator.handleEvaluationException(JREvaluator.java:294)
at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:328)
at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:673)
at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:641)
at net.sf.jasperreports.engine.fill.JRFillElement.evaluateExpression(JRFillElement.java:1247)
at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluateSubreport(JRFillSubreport.java:529)
at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluate(JRFillSubreport.java:357)
at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:383)
at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:548)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2614)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:837)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:276)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:119)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:631)
at net.sf.jasperreports.engine.fill.BaseFillHandle$ReportFill.run(BaseFillHandle.java:135)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassCastException: class net.sf.jasperreports.engine.JREmptyDataSource cannot be cast to class net.sf.jasperreports.engine.data.JsonDataSource (net.sf.jasperreports.engine.JREmptyDataSource and net.sf.jasperreports.engine.data.JsonDataSource are in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @1282f784)
at PersonReport_1717639923594_369623.evaluate(PersonReport_1717639923594_369623:96)
at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:313)
... 14 more
上面从报错,大致意思是说:解析表达式的时候出错了,我找了一圈也没发现哪个组件有问题,于是我就一个一个的尝试,最后发现了问题。
1.2、解决方案
我出现上面这个报错的原因是:
- 子报表配置的表达式路径不正确。
最开始我配置的子报表路径是【"/report/yyyy/xxxx.jasper"】,如下:
这个路径是不正确的,路径不能使用斜杆【/】开头,使用斜杆就表示绝对路径了,应该修改成【"report/yyyy/xxxx.jasper"】,即:采用相对路径格式。
到此,Jasper Studio报表工具预览报错:Error evaluating expression for source text: ((net.sf.jasperreports.engine.dat的问题就解决啦。