布尔字段的Java Bean规范

4 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;
}
Run Code Online (Sandbox Code Playgroud)

当我将其作为Jasper Report数据源发送到List时

List<Branch> dataList = new BranchLogic().selectAll();
JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(dataList);
Run Code Online (Sandbox Code Playgroud)

我收到错误消息

net.sf.jasperreports.engine.JRException:从bean:activeRecord检索字段值时出错.....引起:java.lang.NoSuchMethodException:属性'activeRecord'在类'class com.tawaak.app.data.domain.model.branch.Branch'中没有getter方法

为什么Jasper不承认这isActiveRecord是一个getter方法?

Tun*_*aki 6

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

JavaBeans规范,8.3.2:

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

public boolean is<PropertyName>();
Run Code Online (Sandbox Code Playgroud)

is<PropertyName>可以提供该方法来代替get<PropertyName>方法,或者除了get<PropertyName>方法之外还可以提供该方法.

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

  • 做你的activeRecorda boolean并保持吸气isActiveRecord().如果activeRecord不能,这将是首选的方法null.
  • 保持它作为一个Boolean,但重命名方法isActiveRecord()getActiveRecord().您需要确保调用者null正确处理.