[英]How to send List<Object[]> as datasource to jasper report?
I want to generate a JasperReports report from two tables. 我想从两个表生成一个JasperReports报告。 Tables are
emp
and desig
表是
emp
和desig
Respected bean classes are , 尊敬的Bean类是,
@Entity
@Table(name = "desg")
public class Designation {
@Id
@Column(name="Empid")
private int eId;
@Column(name="Designation")
private String Designation;
// getters and setters
}
@Entity
@Table(name = "emp")
public class Employee {
@Id
@GeneratedValue
@Column(name="Eid")
private int eId;
@Column(name="Name")
private String name;
@Column(name="Address")
private String address;
@Column(name="Salary")
private int salary;
// getters and setters
}
The report with only one table is working fine . 只有一张桌子的报告工作正常。 I use Hibernate to create list of bean object.
我使用Hibernate创建bean对象列表。 I request for report as follow,
我要求报告如下,
List<Object[]> lst= sessio.createQuery("select e.eId, e.name, d.Designation From Employee e, Designation d where e.eId=d.eId ").list();
String reportSourceFile="E:\\classes\\report4.jrxml";
JasperReport jasperReport = null;
JasperDesign jasperDesign = null;
Map parameters = new HashMap();
parameters.put("Title", "The EMP Report");
try {
jasperDesign = JRXmlLoader.load(reportSourceFile);
jasperReport = JasperCompileManager.compileReport(jasperDesign);
byte[] byteStream = JasperRunManager.runReportToPdf(jasperReport, parameters, new JRBeanCollectionDataSource(emplst)); // what to change instead of emplst
OutputStream outStream = response.getOutputStream();
response.setHeader("Content-Disposition","filename=myReport.pdf");
response.setContentType("application/pdf");
response.setContentLength(byteStream.length);
outStream.write(byteStream,0,byteStream.length);
} catch (JRException e1) {
e1.printStackTrace();
}
If I send my emplst
it works fine but I want lst
to be print in report. 如果我把我的
emplst
它工作正常,但我想lst
在报告中打印。 How to send lst
object to JasperReports 's report and how to get in iReport tool? 如何发送
lst
对象的JasperReports的报告,以及如何在iReport的工具来获得?
In your JRXML use import tag 在您的JRXML中使用import标记
<import value="yourPackageName.Employee">
and Create a Parameter in JRXML having data type as java.lang.Object
lets say myEmployee
is the parameter name 在数据类型为
java.lang.Object
JRXML中创建参数,可以说myEmployee
是参数名称
then pass Employee Object
as parameter to JRXML 然后将
Employee Object
作为参数传递给JRXML
Map<String,Object> map=new HashMap<String,Object>();
map.put("myEmployee",yourEmployeeObject);
Now your employee class Object is present in JRXML , you can call getters from JRXML to get the State of Object ( ie attributes of Object
) 现在,您的员工类Object存在于JRXML中,您可以从JRXML调用getter以获取Object的状态(
ie attributes of Object
)
you can: 您可以:
1) create wrapper class for your joined objects to pass to JRBeanCollectionDataSource 1)为您的联接对象创建包装器类,以传递给JRBeanCollectionDataSource
or 要么
2) Create own implementation of JRDataSource 2)创建自己的JRDataSource实现
or 要么
3) fill report based on sql, not datasource 3)基于sql而不是数据源填充报表
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.