简体   繁体   English

如何发送清单 <Object[]> 作为碧玉报告的数据源?

[英]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 表是empdesig

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM