Java 将嵌套对象发送到Jaspersoft iReport

Java 将嵌套对象发送到Jaspersoft iReport,java,jasper-reports,Java,Jasper Reports,我尝试使用Jaspersoft iReport从我的POJO创建报告并将其导出为PDF 我的POJO看起来像这样: class Topic { String topicName int topicPoints; DateRange dateRange; List<Post> posts; } class DateRange { LocalDate begin; LocalDate end; } class Post { St

我尝试使用Jaspersoft iReport从我的POJO创建报告并将其导出为PDF

我的POJO看起来像这样:

class Topic {
    String topicName
    int topicPoints;
    DateRange dateRange;
    List<Post> posts;
}

class DateRange {
    LocalDate begin;
    LocalDate end;
}

class Post {
    String postName;
    int postPoints;
}
<field name="dateRange" class="my.package.DateRange">
    <property name="com.jaspersoft.studio.field.label" value="dateRange"/>
</field>
<field name="posts" class="java.util.List">
    <property name="com.jaspersoft.studio.field.label" value="posts"/>
</field>
只要: 拖放字段topicName(带
“java.lang.String”
)和
topicPoints
(带
“java.lang.Integer”

但是,我如何才能在dateRange或Post中的报表嵌套字段中添加这些字段呢

我看到有像
java.lang.Object
java.util.List
这样的字段类,但是如何在这个对象或列表中定义字段呢

我的理想解决方案是创建如下报告:

更新:

class Topic {
    String topicName
    int topicPoints;
    DateRange dateRange;
    List<Post> posts;
}

class DateRange {
    LocalDate begin;
    LocalDate end;
}

class Post {
    String postName;
    int postPoints;
    List<User> users;
}

class User {
    String userName;
    int userPoints;
}
课程主题{
字符串主题名
国际主题点;
日期范围日期范围;
列出员额;
}
类日期范围{
本地日期开始;
本地日期结束;
}
班岗{
字符串postName;
整数后点数;
列出用户名单;
}
类用户{
字符串用户名;
int用户点;
}

如果它将更加嵌套,该怎么办?

jrxml
中,您可以定义结构化字段(用于嵌套对象),如下所示:

class Topic {
    String topicName
    int topicPoints;
    DateRange dateRange;
    List<Post> posts;
}

class DateRange {
    LocalDate begin;
    LocalDate end;
}

class Post {
    String postName;
    int postPoints;
}
<field name="dateRange" class="my.package.DateRange">
    <property name="com.jaspersoft.studio.field.label" value="dateRange"/>
</field>
<field name="posts" class="java.util.List">
    <property name="com.jaspersoft.studio.field.label" value="posts"/>
</field>
您还必须为表定义
子数据集

<subDataset name="usersDataSet">
    <field name="userName" class="java.lang.String">
        <fieldDescription><![CDATA[userName]]></fieldDescription>
    </field>
    <field name="userPoints" class="java.lang.Integer">
        <fieldDescription><![CDATA[userPoints]]></fieldDescription>
    </field>
</subDataset>


谢谢,让我消化一下,如果一切顺利,我会尽快接受答案。你能解释一下这个class=“my.package.Topic”是什么吗?这是我的项目中指向此文件夹的路径还是什么?我想我没有将iReport和project连接在一起,我只是单独报告。我做错了吗?它的包是完整的
Topic
类名(
my.package.Topic
只是一个示例-我不知道您的正确包;-)。您可以使用所有这些POJO类创建jar,并通过工具-->选项-->类路径-->添加jar将其添加到iReport类路径。您还可以使用静态方法创建factory类,该方法将使用一些模拟数据创建
集合
,并使用POJO类将该类也包括在jar中。在iReport中,您可以将其注册为JavaBean数据源,并将其用于测试(更好地预览报告)。有关更多详细信息,您可以在这里查看,例如:答案更新-我希望它将对您有所帮助。
<subDataset name="usersDataSet">
    <field name="userName" class="java.lang.String">
        <fieldDescription><![CDATA[userName]]></fieldDescription>
    </field>
    <field name="userPoints" class="java.lang.Integer">
        <fieldDescription><![CDATA[userPoints]]></fieldDescription>
    </field>
</subDataset>