使用JasperReports API生成报告时无法从JavaBean检索值

我试图从列表中生成一个简单的JR报告。

我不断从bean:name获取错误检索字段值

此错误是由于错误的getter方法名称,因为jasper使用reflection来从bean中获取字段。 但是,即使在更正了getter方法名称之后。 我一直得到这个例外。 还有其他问题吗?

我的jrxml文件是

                                                                      

Bean类是

 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 getDataBeanList() { ArrayList list = new ArrayList(); 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; } } 

我在这里生成报告

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

我们是否需要对bean类进行更多修改?

解决方案非常简单 – 您应该将JavaBean类的访问修饰符更改为public

喜欢这个:

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

不要忘记您正在使用自己的包裹。


您可以在此处找到有关JavaBean数据源的更多信息

Bean属性应以小写字母开头

例子:

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