2016-04-19 10 views
1

Ich möchte meine DataBean (TestModelA) zu vorhandenen XML zuordnen, aber JasperReports gibt mir eine Ausnahme. Das Problem ist, dass ich benutzerdefinierte Feld (TestModelB) und ich habe öffentliche Getter und Setter in dieser Klasse, aber Jaspis erkennt sie nicht. Wie kann ich dieses Problem lösen?Jasper Reports enthält keine DatenBean

TestModelA:

public class TestModelA { 
private Long id; 
private String label_key; 
private TestModelB testModelB; 
public TestModelA(Long id, String label_key, TestModelB testModelB) { 
    this.id = id; 
    this.label_key = label_key; 
    this.testModelB = testModelB; 
} 
public Long getId() { 
    return id; 
} 
public void setId(Long id) { 
    this.id = id; 
} 
public String getLabel_key() { 
    return label_key; 
} 
public void setLabel_key(String label_key) { 
    this.label_key = label_key; 
} 
public TestModelB getTestModelB() { 
    return testModelB; 
} 
public void setTestModelB(TestModelB testModelB) { 
    this.testModelB = testModelB; 
} 
} 

TestModelB:

public class TestModelB { 

private Long owner; 
public TestModelB(Long owner) { this.owner = owner; } 

public Long getOwner() { 
    return owner; 
} 

public void setOwner(Long owner) { 
    this.owner = owner; 
} 
} 

Meine XML-Datei:

<?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="report3" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="077cd490-b99c-4ed1-ad76-b15714625957"> 
     <property name="ireport.zoom" value="2.1435888100000016"/> 
     <property name="ireport.x" value="94"/> 
     <property name="ireport.y" value="0"/> 
     <queryString> 
      <![CDATA[SELECT MODULE.ID, MODULE.LABEL_KEY, MODULE.OWNER FROM MODULE]]> 
     </queryString> 
     <field name="id" class="java.lang.Long"/> 
     <field name="label_key" class="java.lang.String"/> 
     <field name="owner" class="java.lang.Long"/> 
     <background> 
      <band splitType="Stretch"/> 
     </background> 
     <columnHeader> 
      <band height="21" splitType="Stretch"> 
       <staticText> 
        <reportElement x="0" y="0" width="185" height="20" uuid="68ea9590-9d19-4bc5-9540-d059208b0ce8"/> 
        <text><![CDATA[id]]></text> 
       </staticText> 
       <staticText> 
        <reportElement x="185" y="0" width="185" height="20" uuid="325690ac-7218-4000-8ec6-a492d185477a"/> 
        <text><![CDATA[label_key]]></text> 
       </staticText> 
       <staticText> 
        <reportElement x="370" y="0" width="185" height="20" uuid="20521e4b-9057-42a9-8adc-10309abc8935"/> 
        <text><![CDATA[owner]]></text> 
       </staticText> 
      </band> 
     </columnHeader> 
     <detail> 
      <band height="23" splitType="Stretch"> 
       <textField> 
        <reportElement x="0" y="0" width="185" height="20" uuid="11901f0e-b03d-47f8-a8aa-35bab36d26bf"/> 
        <textFieldExpression><![CDATA[$F{id}]]></textFieldExpression> 
       </textField> 
       <textField> 
        <reportElement x="185" y="0" width="185" height="20" uuid="b715cb6b-3650-4266-a1cf-552ee35bc08f"/> 
        <textFieldExpression><![CDATA[$F{label_key}]]></textFieldExpression> 
       </textField> 
       <textField> 
        <reportElement x="370" y="0" width="185" height="20" uuid="5c41b534-a74e-4b91-b35d-fcbb88789000"/> 
        <textFieldExpression><![CDATA[$F{owner}]]></textFieldExpression> 
       </textField> 
      </band> 
     </detail> 
    </jasperReport> 

Ich erhalte Ausnahme:

Exception in thread "main" net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : owner 
     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:1330) 
     at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1231) 
     at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1207) 
     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.fillReport(JasperFillManager.java:969) 
     at net.didorenko.Reporter.creatReport(Reporter.java:99) 
     at net.didorenko.Reporter.threeReport(Reporter.java:78) 
     at net.didorenko.Reporter.main(Reporter.java:28) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:498) 
     at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 
    Caused by: java.lang.NoSuchMethodException: Unknown property 'owner' on class 'class net.didorenko.model.TestModelA' 
     at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1313) 
     at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:762) 
     at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:837) 
     at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:426) 
     at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:111) 
     ... 20 more 

Antwort

1

Ihre TestModelA Klasse als Datenquelle sind vorbei müssen Sie entweder die Methode in dieser Klasse oder verweisen auf die Methode richtig aus Jaspis Bericht zu erstellen.

Lösung 1 Create-Methode in TestModelA

public Long getOwner() { 
    return getTestModelB().getOwner(); //Handle NullPointer? 
} 

Lösung 2 Referenz richtig in jrxml

<field name="testModelB" class="net.didorenko.model.TestModelB"/> 
... 
<textField> 
    <reportElement x="370" y="0" width="185" height="20" uuid="5c41b534-a74e-4b91-b35d-fcbb88789000"/> 
    <textFieldExpression><![CDATA[$F{testModelB}.getOwner()]]></textFieldExpression> 
</textField> 
+0

Dank für Ihre Antwort danken! – quento

+0

Lösung 3: Ändern Sie den Namen des Berichtsfelds vom Eigentümer in testModelB.owner – dada67

Verwandte Themen