有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在JasperReports中获取列表的第一个元素?

我有一个包含嵌套对象列表的对象。我只想得到列表的第一个元素,并显示它的一个属性

例如:

public class Person {
    List<Phone> phones;
}

public class Phone {
    String type;
    String number;
}

这里我只想获取persons first phone(phones.get(0)在java中),并显示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: Error retrieving field value from bean : $F{phones}.get(0)

那么,我如何告诉JasperReports只获取集合的第一个元素呢


共 (1) 个答案

  1. # 1 楼答案

    我会在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>