如何将类数据源转换为JRDataSource

时间:2016-03-31 19:13:01

标签: java jasper-reports spring-data-jpa

我有这样的特定课程:

public class testClass {

  private String name;

  private List<ListData> listDatas;

  public String getName() {
      return name;
  }

  public void setName(String name) {
      this.name = name;
  }

  public List<ListData> getListData() {
      return listData;
  }

  public void setListData(List<ListData> listData) {
      this.listData = listData;
  }
}

此类来自@RestController侧,@RequestBody使用JSON设置所有数据。我也在这里使用JPA。

@Service图层上,我想将testClass数据用于JasperFillManager

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, ???);

fillReport的3.参数expect JRDataSource数据类型。但我的目标不是JRDataSource。如何将其投射到JRDataSource。有什么办法吗?

2 个答案:

答案 0 :(得分:3)

您没有对象强制转换为JRDataSource,因为它们彼此之间并不是多态的。相反,您需要编写访问数据的JRDataSource 实现。像这样:

public class MyJRDataSource implements JRDataSource {
    private final testClass data;

    public MyJRDataSource(testClass data) {
        this.data = data;
    }

    @Override
    Object getFieldValue(JRField field) {
        // get value of field here
    }

    @Override
    boolean next() {
        // move to next row of data
    }
}

答案 1 :(得分:3)

由于ListDataList<ListData>)是你的一类,因此无需重新发明轮子,创建自己的数据源。您可以使用JRBeanCollectionDataSource

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,  params, new JRBeanCollectionDataSource(getListData()));

您将自动获取jrxml中相对于ListData

中的getter和setter的字段