如何将 Class 数据源转换为 JRDataSource
How to cast Class Data Source to JRDataSource
我有特定的 class 这样的:
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;
}
}
这个class来自@RestController
方,@RequestBody
用JSON设置所有数据。我这里也用JPA。
在@Service
层我想使用testClass
数据,到JasperFillManager
.
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, ???);
fillReport 的 3. 参数需要 JRDataSource
类型的数据。但是我的对象不是JRDataSource
。我怎样才能将它转换为 JRDataSource
。有什么办法吗?
您不会将对象 转换为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
}
}
由于 ListData
(List<ListData>
) 是您的 class,因此无需重新发明轮子,创建您自己的数据源。您可以只使用 JRBeanCollectionDataSource
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, new JRBeanCollectionDataSource(getListData()));
您将自动获取jrxml中相对于ListData
中getters和setters的字段
我有特定的 class 这样的:
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;
}
}
这个class来自@RestController
方,@RequestBody
用JSON设置所有数据。我这里也用JPA。
在@Service
层我想使用testClass
数据,到JasperFillManager
.
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, ???);
fillReport 的 3. 参数需要 JRDataSource
类型的数据。但是我的对象不是JRDataSource
。我怎样才能将它转换为 JRDataSource
。有什么办法吗?
您不会将对象 转换为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
}
}
由于 ListData
(List<ListData>
) 是您的 class,因此无需重新发明轮子,创建您自己的数据源。您可以只使用 JRBeanCollectionDataSource
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, new JRBeanCollectionDataSource(getListData()));
您将自动获取jrxml中相对于ListData