我正在尝试用数据源填充报告,但我得到了这个例外:
Exception in thread "main" net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : notas
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:1577)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:149)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:932)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:864)
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.fill(JasperFillManager.java:569)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:915)
at NewMain.generarNotas(NewMain.java:38)
at NewMain.main(NewMain.java:66)
Caused by: java.lang.NoSuchMethodException: Unknown property 'notas' on class 'class model.Notas'
at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1322)
at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:770)
at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:846)
at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:426)
at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:111)
... 15 more
这是我的jrxml源
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report name" pageWidth="595" pageHeight="842" columnWidth="535" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="020115f1-3bfe-4a04-bd2a-4167b98b9732">
<property name="ireport.zoom" value="1.0000000000000004"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<subDataset name="notasDS" uuid="50c79efe-5519-47b6-ad00-c2f0e7ee7c09">
<queryString>
<![CDATA[]]>
</queryString>
<field name="descripcionUsuario" class="java.lang.String">
<fieldDescription><![CDATA[descripcionUsuario]]></fieldDescription>
</field>
<field name="descripcionNota" class="java.lang.String">
<fieldDescription><![CDATA[descripcionNota]]></fieldDescription>
</field>
<field name="fechaDeRegistro" class="java.lang.String">
<fieldDescription><![CDATA[fechaDeRegistro]]></fieldDescription>
</field>
</subDataset>
<field name="notas" class="java.util.Collection"/>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="37" splitType="Stretch">
<staticText>
<reportElement uuid="ef4eae36-66dd-4e97-be61-65e6dd13b896" x="0" y="0" width="555" height="35"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font fontName="Arial Black" size="24" isBold="true"/>
</textElement>
<text><![CDATA[NOTAS]]></text>
</staticText>
</band>
</title>
<pageHeader>
<band splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="26" splitType="Stretch">
<staticText>
<reportElement uuid="97256cf0-c9fe-4422-99aa-bbbb81232db3" x="2" y="1" width="100" height="20"/>
<textElement/>
<text><![CDATA[fechaDeRegistro]]></text>
</staticText>
<staticText>
<reportElement uuid="065b2f0c-afbd-4110-ba24-054f60994e6a" x="102" y="1" width="237" height="20"/>
<textElement/>
<text><![CDATA[descripcionNota]]></text>
</staticText>
<staticText>
<reportElement uuid="0add16bc-37b7-40e2-ab6d-8b2933b73cf8" x="339" y="1" width="216" height="20"/>
<textElement/>
<text><![CDATA[descripcionUsuario]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="21" splitType="Stretch">
<componentElement>
<reportElement uuid="5fc40798-8e9a-4d07-b273-acc91b4147ec" x="0" y="0" width="555" height="21"/>
<jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Vertical">
<datasetRun subDataset="notasDS" uuid="98a1a836-2fc0-42e2-9ada-f3eea1c4ecba">
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{notas})]]></dataSourceExpression>
</datasetRun>
<jr:listContents height="21" width="555">
<textField>
<reportElement uuid="d95ff7e4-4075-47be-b742-69af661799b6" x="2" y="1" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{fechaDeRegistro}]]></textFieldExpression>
</textField>
<textField>
<reportElement uuid="5a6e3c78-7d57-4f8d-8e5e-bc34e0740b1c" x="102" y="1" width="237" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{descripcionNota}]]></textFieldExpression>
</textField>
<textField>
<reportElement uuid="514ec211-8001-4201-bdd8-78d6d533315b" x="339" y="1" width="216" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{descripcionUsuario}]]></textFieldExpression>
</textField>
</jr:listContents>
</jr:list>
</componentElement>
</band>
</detail>
<columnFooter>
<band splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band splitType="Stretch"/>
</pageFooter>
<summary>
<band splitType="Stretch"/>
</summary>
</jasperReport>
这是我试图通过的课程
package model;
import java.io.Serializable;
public class Notas implements Serializable {
private static final long serialVersionUID = 48L;
private Integer codNota;
private String descripcionNota;
private String descripcionUsuario;
private String fechaDeRegistro;
private Boolean notForDelete;
private Boolean descripcionUsuarioMandatory = Boolean.FALSE;
public Notas() {
}
public Notas(Integer codNota) {
this.codNota = codNota;
}
public Notas(Integer codNota, String descripcionNota, String descripcionUsuario, String fechaDeRegistro) {
this.codNota = codNota;
this.descripcionNota = descripcionNota;
this.descripcionUsuario = descripcionUsuario;
this.fechaDeRegistro = fechaDeRegistro;
this.notForDelete = Boolean.FALSE;
this.descripcionUsuarioMandatory = Boolean.FALSE;
}
public Notas getMe() {
return this;
}
public Integer getCodNota() {
return codNota;
}
public void setCodNota(Integer codNota) {
this.codNota = codNota;
}
public String getDescripcionNota() {
return descripcionNota;
}
public void setDescripcionNota(String descripcionNota) {
this.descripcionNota = descripcionNota;
}
public String getDescripcionUsuario() {
return descripcionUsuario;
}
public void setDescripcionUsuario(String descripcionUsuario) {
this.descripcionUsuario = descripcionUsuario;
}
public String getFechaDeRegistro() {
return fechaDeRegistro;
}
public void setFechaDeRegistro(String fechaDeRegistro) {
this.fechaDeRegistro = fechaDeRegistro;
}
@Override
public int hashCode() {
int hash = 0;
hash += (codNota != null ? codNota.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Notas)) {
return false;
}
Notas other = (Notas) object;
if ((this.codNota == null && other.codNota != null)
|| (this.codNota != null && !this.codNota.equals(other.codNota))
|| (this.descripcionUsuario == null && other.descripcionUsuario != null)
|| (this.descripcionUsuario != null && !this.descripcionUsuario.equals(other.descripcionUsuario))) {
return false;
}
return true;
}
@Override
public String toString() {
return "co.gov.rnec.srcw.model.Notas[ codNota=" + codNota + " ]";
}
public Boolean getNotForDelete() {
return notForDelete;
}
public void setNotForDelete(Boolean notForDelete) {
this.notForDelete = notForDelete;
}
public Boolean getDescripcionUsuarioMandatory() {
return descripcionUsuarioMandatory;
}
public void setDescripcionUsuarioMandatory(Boolean descripcionUsuarioMandatory) {
this.descripcionUsuarioMandatory = descripcionUsuarioMandatory;
}
}
这就是我传递豆子的方法
List notas = Arrays.asList(
new Notas(new Integer("1"), "CORRECCION", "DE nombre", "24/01/2013"),
new Notas(new Integer("5"), "SERIAL", "Cancelado", "25/12/2012"),
new Notas(new Integer("6"), "CAMBIOS", "En los nombres", "26/10/2012"),
new Notas(new Integer("7"), "DECRETO", "8", "27/12/2012")
);
Map parameters = new HashMap();
parameters.put("ReportTitle", "Notas");
parameters.put("DataFile", "Notas.java - Bean Collection");
JasperPrint jasperPrint = JasperFillManager.fillReport("Notas.jasper",
parameters, new JRBeanCollectionDataSource(notas, false));
JasperExportManager.exportReportToPdfFile(jasperPrint, "D:\\Notas.pdf");
在报告中,我唯一的'notas'是数据源的字段。
有人可以解决它吗?
由于
答案 0 :(得分:1)
我花了很多时间试图弄清楚发生了什么,几个小时后我迭代了我作为DataSource传递的List,并意识到我没有强制列表到<强>正确的类型。尝试迭代列表,然后再将其发送到报告中。