我有一个带有嵌套对象列表的对象。我只想获取列表的第一个元素并显示它的一个属性。
示例:
public class Person {
List<Phone> phones;
}
public class Phone {
String type;
String number;
}
这里我只想获取人的第一部电话(java中的phones.get(0)
),并显示phone.numer
属性。
我开始如下,它有效,但显示任何电话号码:
<field name="phones" class="java.util.List"/>
<jr:list printOrder="Vertical">
<datasetRun subDataset="Dataset1">
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{phones})]]></dataSourceExpression>
</datasetRun>
<jr:listContents>
<textField>
<textFieldExpression><![CDATA[$F{number}]]></textFieldExpression>
</textField>
</jr:listContents>
</jr:list>
我还尝试了以下方法:
<field name="phones" class="java.util.List" />
<field name="phoneFirst" class="my.package.Phone">
<fieldDescription><![CDATA[$F{phones}.get(0)]]></fieldDescription>
</field>
<field name="phoneFirstNumber" class="java.lang.String">
<fieldDescription><![CDATA[$F{phoneFirst}.getNumber()]]></fieldDescription>
</field>
结果:
net.sf.jasperreports.engine.JRException:从 bean 检索字段值时出错:$F{phones}.get(0)
那么,我如何告诉 JasperReports
仅获取集合的第一个元素?
最佳答案
我会用 Java 来做这个:
public class Person {
List<Phone> phones;
...
public Phone getFirstPhone() {
if(this.phones != null) {
return this.phones.get(0);
}
return null;
}
...
}
然后在 JRXML 中添加如下内容:
<field name="firstPhoneNumber" class="java.lang.String">
<fieldDescription><![CDATA[$F{firstPhone}.getNumber()]</fieldDescription>
</field>
关于java - 如何在JasperReports中获取列表的第一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28899122/