我试图从列表中生成一个简单的JR报告.
我一直在从bean: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 Data Sources here的更多信息
标签:java,jasper-reports 来源: https://codeday.me/bug/20190831/1777220.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。