Jasper 子报表未获取 datasourcebeans 子对象 属性

Jasper subreport not getting datasourcebeans sub object property

我在编译子报表时在 iReport 中遇到错误:

Errors compiling E:\workspace_new\kidslake\src\main\resources\admissionForm_sub_1.jasper!
Compilation exceptions: com.jaspersoft.ireport.designer.compiler.ErrorsCollector@28f84e61  
net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file: 
1. The method getFullName() is undefined for the type Object                 
value = ((java.lang.Object)field_director.getValue()).getFullName(); //$JR_EXPR_ID=17$                                                                       
2. The method getFullName() is undefined for the type Object                 
value = ((java.lang.Object)field_director.getOldValue()).getFullName(); //$JR_EXPR_ID=17$                                                                          
3. The method getFullName() is undefined for the type Object                 
value = ((java.lang.Object)field_director.getValue()).getFullName(); //$JR_EXPR_ID=17$                                                                       
3 errors      
at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:204)     
at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:512)     
at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572)     

我的豆子class就像

 class Mainclass{
     private List<AdmissionForm> admissionForm;
     //getter
     //setter
 }

 class AdmissionForm{
    private Director director;
    //getter
    //setter
 }

 class Director{
    private String fullName;
    //getter
    //setter
 }

我在主报告中将 JRBeanCollectionDataSource 作为 MainClass 的列表传递

我定义了子报表并传递字段 new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{admissionFormList})

我在我的子报告中定义访问主管全名属性

$F{director}.getFullName()

但是当我编译主报表或子报表时出现上述错误。

帮我解决问题

您可以执行以下操作之一:

  1. director 报告字段的类型设置为 Director(full/qualified class 名称)。显然当前字段类型是 java.lang.Object
  2. 将报告语言更改为 Groovy。
  3. 声明一个名为 director.fullName 的报告字段并直接使用该字段而不是 $F{director}.getFullName()