我正在研究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;
}
}
答案 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}
这就是你所需要的。