布尔字段的Java Bean规范

时间:2016-09-03 13:21:44

标签: java jasper-reports javabeans

我的Java bean的字段为activeRecord

private Boolean activeRecord;

@Override
public Boolean isActiveRecord() {
    return activeRecord;
}

@Override
public void setActiveRecord(Boolean activeRecord) {
    this.activeRecord = activeRecord;
}

当我将列表作为Jasper报告数据源

发送时
List<Branch> dataList = new BranchLogic().selectAll();
JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(dataList);

我收到错误消息

  

net.sf.jasperreports.engine.JRException:从bean:activeRecord检索字段值时出错。   ....   引起:java.lang.NoSuchMethodException:Property&#39; activeRecord&#39;在课堂上没有getter方法&#39; class com.tawaak.app.data.domain.model.branch.Branch&#39;

为什么Jasper不会将isActiveRecord识别为getter方法?

1 个答案:

答案 0 :(得分:5)

前缀is...可用于返回基元boolean的方法。但是,您的字段activeRecord的类型为Boolean,它是一个对象(包装类型为boolean),对于您始终需要使用get...的对象。

来自JavaBeans specification,8.3.2:

  

此外,对于boolean属性,我们允许getter方法匹配模式:

public boolean is<PropertyName>();
     

可以提供此is<PropertyName>方法而不是get<PropertyName>方法,或者除了get<PropertyName>方法之外,还可以提供此方法。

因此,您有两种可能的解决方法:

  • activeRecord成为boolean并保持吸气器isActiveRecord()。如果activeRecord不能null
  • ,这将是首选方法
  • 将其保留为Boolean,但将您的方法isActiveRecord()重命名为getActiveRecord()。您需要确保来电者正确处理null