JasperReports访问javabeans属性

时间:2014-03-10 00:15:50

标签: java jasper-reports javabeans

我正在研究jasperreports,我想访问属性子类,例如Report.Persona.name但是jasperreport告诉我这个错误:

net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : name
Caused by: java.lang.NoSuchMethodException: Unknown property 'name' on class 'class com.test.dto.Report'

我正在尝试通过

访问

但显示其他错误。

我有3个DTO课程

public class Person {

   private int id;
   private String name;
   private String lastname;
   private String age;
   ...getter setter

票务

public class Ticket {

   private int number;
   private String typeTicket;
   private String dateTicket;
   ...getter setter

此类将最后一个类分组

报告

public class Report {

   private Person person;
   private List<Ticket> ticket;
   ...getter setter

调用我的集合(Report)并使用JRBeanCollectionDataSource发送到参数的主类

主要

public class Main {

public static void main(String[] args) throws FileNotFoundException, JRException {

    JasperDesign jasperDesign;
    JasperPrint jasperPrint;
    JasperReport jasperReport;

    try
    {
        InputStream base = new FileInputStream(new File("C:\\Users\\Documents\\NetBeansProjects\\TestReport\\src\\jrxml\\Template.jrxml"));

        jasperDesign = JRXmlLoader.load(base);
        //compile 
        jasperReport = JasperCompileManager.compileReport(jasperDesign);

        jasperPrint = JasperFillManager.fillReport(jasperReport, null,
                new JRBeanCollectionDataSource(
                        getMyData()));
        //view the report using JasperViewer
        JasperViewer.viewReport(jasperPrint);
    }
    catch (JRException e)
    {
        e.printStackTrace();
    }


}


private static Collection getMyData()
{

    List<Report> data = new LinkedList<Report>();
    Report report = new Report();

    Person p1 = new Person();
    p1.setName("My Name ");
    p1.setAage("100");
    p1.setLastName("Last Name");

    report.setPerson(p1);

    data.add(reporte);

    // .... comment code to List<Ticket>
    return data;
}

}

1 个答案:

答案 0 :(得分:1)

嗯,Jasper-Reports处理bean属性的方式是将它们作为参数读取。您只需要创建一个Map对象来存储它们。例如,在Java代码中(在Main类中,因为有用于生成报告的代码),您必须放置此代码段:

Map parameters = new HashMap();
String name = Report.person.getName();
parameters.put("name", name);

jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JRBeanCollectionDataSource(
                    getMyData()));

这样,存储在Report类中的人名将对报告的jrxml可见。现在,第二步是在报表中使用此参数,例如:

$P{name}

这就是你所需要的。