当前位置: 首页 > 面试题库 >

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

何涵畅
2023-03-14
问题内容

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

我一直在 从bean检索name时出错:name

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

我的 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数据源的
更多信息。



 类似资料:
  • 我正在运行Weblogic Server 10.3.6,并尝试使用Java任务控制获取JFR报告。服务器存在于我的Linux虚拟机中,我正在尝试使用任务控制客户端从我的windows机器连接到进程。在尝试连接时,我遇到以下错误: 我认为在启动我的Weblogic服务器之前提供以下启动参数可能会有所帮助: 但这并没有帮助,因为这家初创公司没有提及: 以前,从任务控制客户端连接到服务器对我来说很有效,

  • 上面的代码用于生成allure报告并运行测试,它运行并生成reports-allure-results中的一个文件夹,其中包含JSON文件。见下方截图

  • 问题内容: 我正在尝试使用lcov为我的单元测试套件生成覆盖率报告,但是我什至无法捕获跟踪文件。错误消息表明找不到源文件。该代码由构建机器上的Jenkins作业编译,单元测试作为目标机器上的下游作业执行。源代码和gcno文件被传输到下游作业,然后下游作业执行对lcov的调用。以下是所有详细信息,可能需要一杯咖啡。 在构建机器上,执行make 我想要覆盖的源代码在以下子目录中 目标文件和gcno文件

  • 7.1.0 MVN测试命令应该正常执行测试,知道同样的POM在我更新testNG和其他一些依赖之前工作正常,我也在testNG和maven中使用诱惑力,现在如果我禁用诱惑力-TestNG测试将被执行,但诱惑力不会生成任何报告 我收到此错误。有关单个测试结果,请参阅C:\Users\warrior\Desktop\MobileAutomationTest\target\surefire报告。请参阅转

  • 使用Netbeans IDE 8.0.2和JDK8,当我尝试生成PDF报告时,我得到以下错误: 无法解析类型java.lang.CharSequence。它从required.class filesvalue=((java.lang.string)field_type.getvalue()).contentequals(“xml”)中间接引用;//$JR_EXPR_ID=26$ 我在网上搜索了一下

  • 问题内容: 我正在使用php代码查询数据库,结果将用于生成报告。 如果我想以pdf格式生成报告,该怎么办? 问题答案: 如果您的PDF文件中需要UTF支持,请考虑使用库。 从此处下载:http : //www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf 在您的脚本中: