2015-03-12 1 views
-1

Je souhaite générer un rapport JasperReports à partir de deux tables. Les tables sont emp et desigComment envoyer la liste <Object[]> comme source de données dans le rapport jasper?

classes de haricots sont respectés,

@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 
} 

Le rapport avec une seule table fonctionne très bien. J'utilise Hibernate pour créer une liste d'objets bean. Je demande de rapport comme suit,

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(); 
    } 

Si je vous envoie mon emplst cela fonctionne bien, mais je veux lst être imprimer dans le rapport. Comment envoyer l'objet lst au rapport JasperReports et comment obtenir l'outil iReport?

Répondre

0

Dans votre JRXML utiliser un tag d'importation

 <import value="yourPackageName.Employee"> 

et créer un paramètre dans JRXML ayant le type de données java.lang.Object permet de dire myEmployee est le nom du paramètre

passe alors Employee Object comme paramètre à JRXML

Map<String,Object> map=new HashMap<String,Object>(); 
map.put("myEmployee",yourEmployeeObject); 

Maintenant que votre classe d'employés Object est présente dans JRXML, vous pouvez appeler des getters de JRXML pour obtenir l'état de l'objet (i.e attributes of Object)

+0

Oui, maintenant Employee est disponible dans le rapport mais comment puis-je obtenir la valeur des objets 'Designation' – Raghu

0

vous pouvez:
1) Créer une classe d'emballage pour vos objets joints pour passer à JRBeanCollectionDataSource
ou
2) Créer propre implémentation de JRDataSource
ou
3) remplir rapport basé sur sql, not datasource