我正在尝试获取由 JasperReports 生成的示例报告,但是它引发了一些我无法理解的异常.
I am trying to get a sample report generated by JasperReports but it is throwing some exception that I can not understand.
我有一个豆子:
class DataBean { public String country; public String name; public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getName() { return name; } public void setName(String name) { this.name = name; } }一个产生上述bean列表的类:
A class that results list of above bean:
class DataBeanList { public ArrayList<DataBean> getDataBeanList() { ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>(); dataBeanList.add(produce("Manisha", "India")); dataBeanList.add(produce("Dennis Ritchie", "USA")); dataBeanList.add(produce("V.Anand", "India")); dataBeanList.add(produce("Shrinath", "California")); return dataBeanList; } private DataBean produce(String name, String country) { DataBean dataBean = new DataBean(); dataBean.setName(name); dataBean.setCountry(country); return dataBean; } }这就是我的做法:
public static void main(String[] args) throws Exception { String sourceFileName = "/home/oodles/Samples/jasper_report_template.jasper"; DataBeanList DataBeanList = new DataBeanList(); ArrayList<DataBean> dataList = DataBeanList.getDataBeanList(); System.out.println("<<<" + dataList.get(0).getCountry()); JasperReportBuilder report = DynamicReports.report(); JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(dataList, false); report.setDataSource(beanColDataSource); Map parameters = new HashMap(); try { JasperFillManager.fillReportToFile(sourceFileName, parameters, beanColDataSource); } catch (JRException e) { e.printStackTrace(); } }以下是异常:
net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : country at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:123) at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getFieldValue(JRAbstractBeanDataSource.java:96) at net.sf.jasperreports.engine.data.JRBeanCollectionDataSource.getFieldValue(JRBeanCollectionDataSource.java:100) at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:1331) at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1232) at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1208) at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1554) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:149) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:909) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:841) at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:88) at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:653) at net.sf.jasperreports.engine.JasperFillManager.fillToFile(JasperFillManager.java:542) at net.sf.jasperreports.engine.JasperFillManager.fillToFile(JasperFillManager.java:494) at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:874) at com.general.ReportsMain.main(ReportsMain.java:80) Caused by: java.lang.NoSuchMethodException: Property 'country' has no getter method in class 'class com.general.DataBean' at org.apachemons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1318) at org.apachemons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:762) at org.apachemons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:837) at org.apachemons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:426) at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:111) ... 15 more如果您需要查看.jasper文件源: 我仅在此处附加字段以仅显示有意义的代码:
In case you need to see .jasper file source: i am attaching only fields to show only meaningful code here:
<field name="country" class="java.lang.String"> <fieldDescription><![CDATA[country]]></fieldDescription> </field> <field name="name" class="java.lang.String"> <fieldDescription><![CDATA[name]]></fieldDescription> </field>推荐答案
最后,我弄清楚了需要采取什么措施来避免出现任何异常:
Finally i figured out what you need to do to avoid any exception:
可以从其他包中访问您的数据源以从中提取数据,并且如果您的数据源的bean不是公共的,则无法访问该类. 因此,您需要将您的类公开(bean类).
Your datasource is accessed in other packages to extract data from them and if the bean of your datasource is not public then it's not possible to access the class. SO you need to make your class public (the bean class).
更多推荐
使用JasperReports API从bean异常检索字段值时出错
发布评论