Cannot get value from JavaBean when reporting using JasperReports API

I am trying to create a simple JR report from a list.

I keep getting Error getting field value from bean: name

This error occurs due to the wrong getter method name, since jasper uses reflection to take fields from the bean. However, even after the getter method name has been corrected. I keep getting this exception. Is there any other problem?

My jrxml file

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"> <jasperReport name="simpleReport"> <field name="name" class="java.lang.String"/> <field name="count" class="java.lang.String"/> <title> <band height="50"> <staticText> <reportElement x="0" y="0" width="180" height="15"/> <textElement/> <text><![CDATA[Report]]></text> </staticText> </band> </title> <pageHeader> <band/> </pageHeader> <columnHeader> <band height="20"> <staticText> <reportElement x="180" y="0" width="180" height="20"/> <textElement> <font isUnderline="true"/> </textElement> <text><![CDATA[Event Name]]></text> </staticText> <staticText> <reportElement x="360" y="0" width="180" height="20"/> <textElement> <font isUnderline="true"/> </textElement> <text><![CDATA[Count]]></text> </staticText> </band> </columnHeader> <detail> <band height="20"> <textField> <reportElement x="180" y="0" width="180" height="15"/> <textElement/> <textFieldExpression><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="360" y="0" width="180" height="15"/> <textElement/> <textFieldExpression><![CDATA[$F{count}]]></textFieldExpression> </textField> </band> </detail> <columnFooter> <band/> </columnFooter> <pageFooter> <band height="15"> <staticText> <reportElement x="0" y="0" width="40" height="15"/> <textElement/> <text><![CDATA[Page:]]></text> </staticText> <textField> <reportElement x="40" y="0" width="100" height="15"/> <textElement/> <textFieldExpression class="java.lang.Integer"><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression> </textField> </band> </pageFooter> <summary> <band/> </summary> </jasperReport> 

Bean class

 class EventBean { private String name; private String count; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCount() { return count; } public void setCount(String count) { this.count = count; } } class EventNameList { public ArrayList<EventBean> getDataBeanList() { ArrayList<EventBean> list = new ArrayList<EventBean>(); list.add(generate("Flow", "100")); list.add(generate("Non flow", "300")); list.add(generate("Allow", "600")); list.add(generate("Deny", "50")); return list; } private EventBean generate(String name, String country) { EventBean bean = new EventBean(); bean.setName(name); bean.setCount(country); return bean; } } 

And I create reports here

 JasperCompileManager.compileReportToFile(inpuutjrxml, outputjasper); EventNameList list = new EventNameList(); JRBeanCollectionDataSource beanList = new JRBeanCollectionDataSource(list.getDataBeanList()); JasperPrint jasperPrint = JasperFillManager.fillReport(outputjasper, new HashMap(), beanList); JasperExportManager.exportReportToPdfStream(jasperPrint, new FileOutputStream(pefoutput)); 

Do I need to make any changes to the bean class?

+3
source share
2 answers

The solution is very simple - you must change the access modifier of the JavaBean class to public .

Like this:

 public class EventBean { private String name; private String count; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCount() { return count; } public void setCount(String count) { this.count = count; } } 

Do not forget that you are using your own package.


Learn more about JavaBean data sources here.

+5
source

Bean attribute must begin with a lowercase letter

example:

 public class DataBean { private String name; private String dateStart; private String DateEnd; // ->dateEnd private String prixTotale; private String prixPayer; 
0
source

All Articles