Java JasperReport:net.sf.jasperreports.engine.fill.JRExpressionEvalException:评估表达式时出错:

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/21521479/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 09:08:10  来源:igfitidea点击:

JasperReport: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression :

javajasper-reports

提问by Girish K

I am generating a jasper report with Java. It has a Student bean which contains college_name and a list of student_info(second bean). Student_info contains student_Name and address.
I have set college_Name and the list of Student_info bean to Student bean.

我正在用 Java 生成一个 jasper 报告。它有一个 Student bean,其中包含 College_name 和 student_info 列表(第二个 bean)。Student_info 包含 student_Name 和地址。
我已将 College_Name 和 Student_info bean 的列表设置为 Student bean。

I am getting values when I set only the student_info(second bean) object (not List) to Student bean, but getting an error invalid expression when I pass the list of Student_info bean. I do not know how to get Student_info list and then its value like student_Name and address.

当我只将 student_info(second bean) 对象(而不是 List)设置为 Student bean 时,我得到了值,但是当我传递 Student_info bean 的列表时得到一个错误无效的表达式。我不知道如何获取 Student_info 列表,然后获取其值,如 student_Name 和地址。

It gives me the following error:

它给了我以下错误:

net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression : 
aa DEBUG net.sf.jasperreports.engine.util.DeduplicableRegistry: Found existing instance net.sf.jasperreports.engine.fill.JRTemplateText@526b3f for object net.sf.jasperreports.engine.fill.JRTemplateText@2b5c2d
Source text : $F{Student_infoDTOList}.getName()
at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:244)
at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:591)
aa DEBUG net.sf.jasperreports.engine.util.DeduplicableRegistry: Added object net.sf.jasperreports.engine.fill.JRTemplateText@b0c9f0
at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:559)
at net.sf.jasperreports.engine.fill.JRFillElement.evaluateExpression(JRFillElement.java:1016)
at net.sf.jasperreports.engine.fill.JRFillTextField.evaluateText(JRFillTextField.java:504)
at net.sf.jasperreports.engine.fill.JRFillTextField.evaluate(JRFillTextField.java:488)
aa DEBUG net.sf.jasperreports.engine.fill.JRFillTextField: created net.sf.jasperreports.engine.fill.JRTemplateText@b0c9f0 for (null, null)
at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:259)
at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:456)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2057)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:778)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:288)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:151)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:932)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:864)
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:114)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:653)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:969)

My JRXml file is:

我的 JRXml 文件是:

<textField isBlankWhenNull="false">
            <reportElement key="textField" x="42" y="0" width="112" height="13" uuid="1e3a7dff-583c-4322-88cb-c2c0f1ea7569"/>
            <textElement>
                <font size="10"/>
            </textElement>
            <textFieldExpression><![CDATA[$F{Student_infoDTOList}.getName()]]></textFieldExpression>
        </textField>

采纳答案by user1791574

You should follow this step.

您应该遵循此步骤。

  • Define text field in detail band.
  • Add a new field with name of attribute of object from list. e.g. student_name, address.
  • right click on text field and click on edit expression. set field name as student_name.
  • Now run your application.
  • 在详细信息带中定义文本字段。
  • 从列表中添加一个具有对象属性名称的新字段。例如学生姓名、地址。
  • 右键单击文本字段,然后单击编辑表达式。将字段名称设置为 student_name。
  • 现在运行您的应用程序。