Java 将嵌套对象发送到Jaspersoft iReport
我尝试使用Jaspersoft iReport从我的POJO创建报告并将其导出为PDF 我的POJO看起来像这样: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
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>