2016-09-03 11 views
3

У меня есть Java-компонент с полем ActiveRecordJava Bean Спецификация для булева поля

private Boolean activeRecord; 

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

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

когда я отправить его в Списке в качестве источника данных Jasper Report

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

я получаю сообщение об ошибке

net.sf.jasperreports.engine.JRException: Ошибка получения значения поля из bean: acti veRecord. .... Вызванный: java.lang.NoSuchMethodException: Property 'ActiveRecord' не имеет геттер в классе 'класса com.tawaak.app.data.domain.model.branch.Branch'

Почему Джаспер не распознает isActiveRecord как метод геттера?

ответ

4

Префикс is... может использоваться для методов, возвращающих примитив boolean. Однако ваше поле activeRecord имеет тип Boolean, который является объектом (тип обертки boolean), а для объектов вам всегда нужно использовать get....

С JavaBeans specification, 8.3.2:

Кроме того, для boolean свойств, мы даем метод геттер, чтобы соответствовать схеме:

public boolean is<PropertyName>(); 

Этот is<PropertyName> метод может быть обеспечен вместо a get<PropertyName>, или он может быть предоставлен в дополнение к методу get<PropertyName>.

Как таковой, у вас есть два возможных исправления:

  • Сделайте свой activeRecord в boolean и держать поглотитель isActiveRecord(). Это был бы предпочтительный подход, если activeRecord не может быть null.
  • Сохраните его как Boolean, но переименуйте свой метод isActiveRecord() в getActiveRecord(). Вам нужно убедиться, что вызывающий абонент правильно обрабатывает null.

 Смежные вопросы

  • Нет связанных вопросов^_^