java - 使用 JasperReports API 生成报告时无法从 JavaBean 检索值

标签 java jasper-reports

我正在尝试从列表中生成一个简单的 JR 报告。

我一直收到Error retrieving field value from bean : name

这个错误是由于错误的 getter 方法名称引起的,因为 jasper 使用反射从 bean 中获取字段。但是,即使在更正了 getter 方法名称之后。我不断收到这个异常(exception)。还有其他问题吗?

我的jrxml文件是

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE jasperReport PUBLIC  "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">

<jasperReport name="simpleReport">
  <field name="name" class="java.lang.String"/>
  <field name="count" class="java.lang.String"/>
  <title>
        <band height="50">
            <staticText>
          <reportElement x="0" y="0" width="180" height="15"/>
            <textElement/>
          <text><![CDATA[Report]]></text>
        </staticText>
        </band>
    </title>
  <pageHeader>
      <band/>
  </pageHeader>
  <columnHeader>
        <band height="20">
        <staticText>
          <reportElement x="180" y="0" width="180" height="20"/>
        <textElement>
            <font isUnderline="true"/>
        </textElement>
        <text><![CDATA[Event Name]]></text>
      </staticText>
      <staticText>
        <reportElement x="360" y="0" width="180" height="20"/>
        <textElement>
          <font isUnderline="true"/>
        </textElement>
        <text><![CDATA[Count]]></text>
      </staticText>
    </band>
  </columnHeader>
  <detail>
    <band height="20">
      <textField>
        <reportElement x="180" y="0" width="180" height="15"/>
        <textElement/>
        <textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
      </textField>
      <textField>
        <reportElement x="360" y="0" width="180" height="15"/>
        <textElement/>
        <textFieldExpression><![CDATA[$F{count}]]></textFieldExpression>
      </textField>
    </band>
  </detail>
  <columnFooter>
    <band/>
  </columnFooter>
  <pageFooter>
    <band height="15">
      <staticText>
        <reportElement x="0" y="0" width="40" height="15"/>
        <textElement/>
        <text><![CDATA[Page:]]></text>
      </staticText>
      <textField>
        <reportElement x="40" y="0" width="100" height="15"/>
        <textElement/>
        <textFieldExpression class="java.lang.Integer"><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression>
      </textField>
    </band>
  </pageFooter>
  <summary>
    <band/>
  </summary>
</jasperReport>

Bean类是

class EventBean {
    private String name;
    private String count;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCount() {
        return count;
    }
    public void setCount(String count) {
        this.count = count;
    }
}

class EventNameList {
    public ArrayList<EventBean> getDataBeanList() {
        ArrayList<EventBean> list = new ArrayList<EventBean>();

        list.add(generate("Flow", "100"));
        list.add(generate("Non flow", "300"));
        list.add(generate("Allow", "600"));
        list.add(generate("Deny", "50"));

        return list;
    }

    private EventBean generate(String name, String country) {
        EventBean bean = new EventBean();
        bean.setName(name);
        bean.setCount(country);

        return bean;
    }
}

我在这里生成报告

JasperCompileManager.compileReportToFile(inpuutjrxml, outputjasper);

EventNameList list = new EventNameList();
JRBeanCollectionDataSource beanList = new JRBeanCollectionDataSource(list.getDataBeanList());

JasperPrint jasperPrint = JasperFillManager.fillReport(outputjasper, new HashMap(), beanList);

JasperExportManager.exportReportToPdfStream(jasperPrint, new FileOutputStream(pefoutput));

我们需要对bean类做更多的修改吗?

最佳答案

解决方案非常简单 - 您应该将 JavaBean 类的访问修饰符更改为 public

像这样:

public class EventBean {
    private String name;
    private String count;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCount() {
        return count;
    }

    public void setCount(String count) {
        this.count = count;
    }
}

不要忘记您使用的是自己的包。


您可以找到有关JavaBean 数据源 的更多信息here

关于java - 使用 JasperReports API 生成报告时无法从 JavaBean 检索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18119754/

相关文章:

java - 在 Java/Android 中查找需要一秒或更长时间执行的方法的最快/最简单的方法

java - 将 JButton 设置移至单独的类

java - Jasper 报告缺少第一行

java - 开源图表和报告工具

java - 在Ireport中,如果我们将map作为参数从java传递给ireport,如何根据ireport字段的键访问map值

java - Eclipse ctrl+click 指的是错误的行

java - Android 服务中调度的 AsyncTask 仅正确执行一次

java - 可以从给定的 protobuf 序列化中提取所有标签号吗?

java - 从java webapp中的数据生成图表

jasper-reports - 如何在 Jasper 报告中创建可编辑的 PDF 字段