Я пытаюсь написать часть программного обеспечения для составления отчета полезных нотамов для моего устройства.Jasper Reports - JRException: ошибка получения значения поля из bean
Я проверил Unable to retrieve value from a JavaBean while generating reports using JasperReports API нить.
У меня такая же проблема, но либо я слепой (или тупой, либо комбинация из двух), либо в моем коде есть что-то плохое.
Вот мой боб:
package report;
public class ReportBean {
private String notamLocator;
private String notamSeries;
private String fieldA;
private int notamClass;
public void setNotamLocator(String NotamLocator) {
this.notamLocator = NotamLocator;
}
public void setNotamSeries(String NotamSeries) {
this.notamSeries = NotamSeries;
}
public void setFieldA(String FieldA) {
this.fieldA = FieldA;
}
public void setNotamClass(int NotamClass) {
this.notamClass = NotamClass;
}
public String getNotamLocator() {
return this.notamLocator;
}
public String getNotamSeries() {
return this.notamSeries;
}
public String getFieldA() {
return this.fieldA;
}
public int getNotamClass() {
return this.notamClass;
}
public String toString() {
StringBuffer buf = new StringBuffer();
buf.append(getNotamLocator());
buf.append(", ");
buf.append(getNotamClass());
buf.append(", ");
buf.append(getNotamSeries());
buf.append(", ");
buf.append(getFieldA());
return buf.toString();
}
}
Это мой служебный класс, чтобы создать коллекцию этих бобов
package report;
import java.sql.*;
import java.util.*;
import database.*;
public class DataBeanMaker {
public ArrayList<ReportBean> getDataBeanList() throws Exception {
ArrayList<ReportBean> list = new ArrayList<ReportBean>();
AccessDatabase ad = new AccessDatabase();
Connection conn = ad.getConnection();
String query = "SELECT NotamLocator, NotamSeries, NotamClass, FieldA FROM TEMP_NOTAMS";
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(query);
while (rs.next()) {
String NotamLocator = rs.getString("NotamLocator");
int NotamClass = rs.getInt("NotamClass");
String NotamSeries = rs.getString("NotamSeries");
String FieldA = rs.getString("FieldA");
ReportBean bean = produce(NotamLocator, NotamSeries, FieldA, NotamClass);
System.out.println(bean);
list.add(bean);
}
return list;
}
private ReportBean produce(String NotamLocator, String NotamSeries, String FieldA, int NotamClass) {
ReportBean reportBean = new ReportBean();
reportBean.setNotamSeries(NotamSeries);
reportBean.setNotamLocator(NotamLocator);
reportBean.setFieldA(FieldA);
reportBean.setNotamClass(NotamClass);
return reportBean;
}
}
и, наконец, мой класс, который на самом деле пытается создать отчет
package report;
import database.*;
import enav.alg.Constants;
import java.sql.*;
import java.util.*;
import java.io.*;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.*;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
public class report {
public static void main(String[] args) throws Exception {
Constants c = new Constants(new String[]{"E:/Documents/Netbeans Projects/IText/"});
AccessDatabase ad = new AccessDatabase();
File reportModel = new File(Constants.jasperreports, "test_report.jrxml");
InputStream is = new FileInputStream(reportModel);
DataBeanMaker dbm = new DataBeanMaker();
ArrayList<ReportBean> dataBeanList = dbm.getDataBeanList();
JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(dataBeanList, false);
JasperDesign jasperDesign = JRXmlLoader.load(is);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, beanColDataSource);
JasperExportManager.exportReportToPdfFile(jasperPrint, Constants.jasperreports + "/pdfReport.pdf");
}
}
Я получаю это исключение:
Exception in thread "main" net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : NotamLocator
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:109)
at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:1358)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1259)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1235)
at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1614)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:150)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:963)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:892)
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:114)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:668)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:984)
at report.report.main(report.java:41)
Caused by: java.lang.NoSuchMethodException: Unknown property 'NotamLocator' on class 'class report.ReportBean'
at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1257)
at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:808)
at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:884)
at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:464)
at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:111)
... 13 more
Java Result: 1
Я считаю, что эти поля имеют соответствующие имена, запросы не являются пустыми (я посылаю на консоль, что я добавляю в коллекцию, и это то, что я ожидал от успешного запроса & не пустой результат множества). Любые подсказки?
Вы должны отправить файл * jrxml * –