Отчеты Jasper: JRBeanCollectionDataSource не может быть преобразован в тип
Я строю диаграмму в iReports, и когда я компилирую в Eclipse, я получаю следующую ошибку:
net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file:
1. net.sf.jasperreports.engine.JRBeanCollectionDataSource cannot be resolved to a type
value = new net.sf.jasperreports.engine.JRBeanCollectionDataSource(((java.lang.String)field_chartData46xAxis.getValue())); //$JR_EXPR_ID=11$
2. net.sf.jasperreports.engine.JRBeanCollectionDataSource cannot be resolved to a type
value = new net.sf.jasperreports.engine.JRBeanCollectionDataSource(((java.lang.String)field_chartData46xAxis.getOldValue())); //$JR_EXPR_ID=11$
3. net.sf.jasperreports.engine.JRBeanCollectionDataSource cannot be resolved to a type
value = new net.sf.jasperreports.engine.JRBeanCollectionDataSource(((java.lang.String)field_chartData46xAxis.getValue())); //$JR_EXPR_ID=11$
3 errors
at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:204)
at net.sf.jasperreports.engine.JasperCompileManager.compile(JasperCompileManager.java:240)
at net.sf.jasperreports.engine.JasperCompileManager.compile(JasperCompileManager.java:173)
at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:448)
at org.reportprotojava.protosheet.Program.main(Program.java:122)
Я передаюArrayList изProtoReport (только один прямо сейчас, пока я тестирую) компилятору jasper.ProtoReport класс содержитChartData класс, который в свою очередь имеет дваArrayList типа Double, один для оси X и один для оси Y.
ОпределенияProtoReport,ChartData классы иосновная программа являются следующими (слегка сокращенными):
ProtoReport Учебный класс:
package org.reportprotojava.protosheet;
import java.util.ArrayList;
public class ProtoReport {
private String outputFileName;
private String title;
private String logoLocation;
private String paragraphText;
private ArrayList tableData;
private String picLocation;
private int[][] graphData; //TODO decide how to store chart data
private ChartData chartData;
private String path;
//default constructor
public ProtoReport() {
// Initialize object fields
outputFileName = "PrototypeReport";
title = "Prototype Report";
paragraphText = "Default text";
tableData = new ArrayList();
chartData = new ChartData();
//set path to working directory
path = System.getProperty("user.dir");
//default to assumed report location
//(ie same folder as .jrxml and .jasper files)
logoLocation = path + "\\reports\\logo.jpg";
picLocation = path + "\\reports\\pic.jpg";
}
ChartData Учебный класс:
package org.reportprotojava.protosheet;
import java.util.ArrayList;
public class ChartData {
private ArrayList xAxis;
private ArrayList yAxis;
/**
* @param xAxis
* @param yAxis
*/
//default constructor
public ChartData(){
xAxis = new ArrayList();
yAxis = new ArrayList();
}
//constructor
public ChartData(ArrayList xAxis, ArrayList yAxis) {
super();
this.xAxis = xAxis;
this.yAxis = yAxis;
}
Основная программа
public class Program {
/**
* @param args
*
*Program runs our ProtoReport class and its supporting classes
* In the end we will have generated a .pdf from the
* previously defined .jrxml file
*/
//Generate some random data for the chart
public static ArrayList randomData(int size) {
ArrayList arrayList = new ArrayList();
double randNumber;
for (int i = 0; i < size; i++) {
randNumber = Math.random();
arrayList.add(randNumber);
}
return arrayList;
}
public static void main(String[] args) {
ArrayList listOfReports = new ArrayList();
ProtoReport protoReport1 = new ProtoReport();
ProtoReport protoReport2 = new ProtoReport();
//Simple Fields and text
protoReport1.setTitle("Example<br>Fact Sheet");
protoReport1.setLogoLocation(protoReport1.getPath() + "\\reports\\logo.gif");
ChartData chartData = new ChartData();
chartData.setYAxis(randomData(20));
for (Double i = (double) 0; i < chartData.getYAxis().size(); i++) {
chartData.getXAxis().add(i);
}
protoReport1.setChartData(chartData);
String jrxmlLocation = protoReport1.getPath()
+ "\\reports\\ReportPrototype.jrxml";
String outputFileName = protoReport1.getPath()
+ "\\reports\\generated\\" + protoReport1.getOutputFileName() + ".pdf";
listOfReports.add(protoReport1);
//and wrap the ArrayList in a JRBeanCollectionDataSource
JRBeanCollectionDataSource beanBurritoWrap = new JRBeanCollectionDataSource(listOfReports);
//build the jasper report
JasperReport jasperReport;
JasperPrint jasperPrint;
HashMap hashMap = new HashMap();
boolean reportCreated;
try {
jasperReport = JasperCompileManager.compileReport(jrxmlLocation);
jasperPrint = JasperFillManager.fillReport(jasperReport, hashMap, beanBurritoWrap);
JasperExportManager.exportReportToPdfFile(jasperPrint, outputFileName);
reportCreated=true;
}
catch (JRException e) {
e.printStackTrace();
reportCreated=false;
}
}
гуглил проблему и придумалэтот а такжеэтоти прочитайтераздел источника данных на jasper sourceforge но ни один из них не помог решить проблему, и ямы убедились, что ямы использовали
new net.sf.jasperreports.engine.JRBeanCollectionDataSource($F{chartData.xAxis})
в моем выражении источника данных диаграммы (и обновил его, когда я изменяю имена полей), и поля установлены вСписок введите в свойствах iReport.
Вот мой.jrxml
В iReports I 'мы пробовали:
-Создание и именование полейProtoReport.ChartData.xAxis а такжеProtoReport.ChartData.yAxis под полямиа также поля подChartData источник я добавил
-Переименование полей вChartData.xAxis а такжеChartData.yAxis
-Переименование полей вchartData.xAxis а такжеchartData.yAxis
-Просто используя поля в поле
-Просто используя поля в ChartData - Поля
Все дают мне ошибку. Любые идеи, что яя делаю неправильно?
Дополнительный вопрос:
- В таком виде моя диаграмма, скорее всего, будет давать только точки данных xAxis. Как я могу использовать содержимое одногоArrayList для оси X и другой для оси Y? т.е. мойXAxis а такжеYAxis поля вChartData объект.
-TherandomData () метод, который я объявил ранееглавный не будет работать, пока я не объявилстатический, это почему?
редактировать
Чтобы сформулировать мой вопрос более четко: как я могу назвать свои поля, настроить источники данных и настроить наборы данных для решения этой проблемы?
Я следую учебному пособию, указанному в комментариях (извините за не гиперссылку; как новый пользователь я 'я уже использовал все мои гиперссылки) и вносил в него изменения для своих нужд, но его структура данных более проста, чем у меня и у меня »Я хотел бы научиться работать с более сложными объектами и наборами данных в отчетах Jasper.