使用JasperReports API从bean异常检索字段值时出错

编程入门 行业动态 更新时间:2024-10-11 17:25:04
本文介绍了使用JasperReports API从bean异常检索字段值时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在尝试获取由 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异常检索字段值时出错

本文发布于:2023-11-11 08:15:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1577854.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字段   异常   JasperReports   API   bean

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!