用实体类实现报表数据填充
创建一个实体类
上一节已经介绍了如何传入参数填充报表,这一节要用另一个数据源来填充报表,也就是上一节介绍到的jasper.fill()方法的第三个参数JRDataSource,JavaBeanColletion可以用来生成一个JRDataSource的实现 类,所以我们可以传入实体类对象集合来实现报表数据填充。
这个实体类很简单,就是学生的各科成绩,排名等这些参数。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
创建一个可以生成Bean对象的Jar包
注意:在模板设计中,Jaspersoft studio只能识别Jar包文件,如果要在模板中加入实体类对象集合作为数据源,就必须将生成实体类对象集合的一个工具类,还有实体类本身打包成一个Jar然后在Jaspersoft studio中导入该Jar包,否则studio是读不到这个实体类的对象的。
该工具类由一个静态方法组成,该方法返回实体类对象的集合,一定要记住该静态方法名,后面会用到。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
然后用Eclipse将工具类和实体类导出成一个Jar包
选择Export为Jar
找到bean包,并只选中这个包,选择好保存的路径与包名,点击Finish即可生成一个Jar包
在Jaspersoft studio导入该jar包到项目中,跟Eclipse相同的操作。
点击External jar包,找到刚才生成的jar包,点击ok导入。
在JasperSoft Studio中创建一个实体类对象集合数据源
上面步骤完成后,创建一个新的adapter,命名为JavaBeanAdapter以Collection of JavaBeans为数据来源
点击Next出现一个对话窗,这一步很关键,要把上面工具类的静态方法填入第二个输入框中,第二个输入框填入getBeanCollection,与工具类StudnetBeanFactory里的静态方法名一致。第一个输入框就是选定生成实体类对象集合的工具类,点击右侧的…
出现一个搜索框,填入student会出自动出现我们所导入的jar包里的类,注意如果没有导入Jar包,这里会无法搜索出我们所需要的结果。
点击OK后这个Adatper就创建完成了,接下来还要将之导入到报表模板中。
在项目结构预览outline中右键,然后选中Dataset and query进行配置数据源
选中我们先前创建的数据源JavaBeanAdapter,Class框跟工具类一样输入student就会出现实体类StudentScore,选中后会发现下面的空白框里出现了实体类的字段,按照图中步骤操作,则实体类字段就成功地导入到模板中,我们就可以去引用它了。
由下图可以看到实体类的字段已经成功地导入模板了。
接下来,只需把原来的参数换为实体类即可。
如果这时把Fields里的实体类拉入报表模板时,会报如下错误。
意思是不能从SubDataSet中拉字段进模板中,这一步出现的原因是我在Outline这里点的不是Dataset and query,而是新建了一个Dataset,从上面的图就可以看出我的实体类字段单独出现在了MyBeanSet这里,这里的字段看来是不能直接拉入的。
将这个数据源删掉,重新设置,这点要点击Dataset and query,其实我上面的步骤是正确的,只是我以前创建了这个数据源而忘了删掉,于是就出现了不可拉入的错误。
正确的字段数据源应该是在主结构视觉中的Fields里的,如下图所示。
然后将之拉入到对应位置,设置与参数的设置一样,然后记得将变量total的表达式也要改为所有字段相加的和。
PS:yuwen被我笔误写成了yuwne,惭愧。。
记得改total变量的表达式。
点击Preview进行预览。
可以看到,我们输入了三条数据,所以就填充生成了三个表格,那为什么第一页只生成了一个表格,而第二页就生成了二个表格呢。后面会详细说到,这与报表模板的元素结构有关。
将报表模板导入Java工程中,生成一个Html.
将报表模板编译成二进制文件,参考以前的步骤,熟悉的配方。
调用Jasperreports 方法,生成一个Html文件,方法如下。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
运行工程,生成Html文件,刷新一下工程目录,可以看到新生成的Html文件,点开预览,可以看到三个实体类对象都已经传进去了。
如果我不只想传三条数据呢,是不是我们放入的Jar包只有三个学生成绩的对象,所以在Java工程中就只能放三条数据呢。我们在生成对象的静态方法里再添加一条数据,然后运行工程,看这条数据会不会被填充进去呢。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
可以看到生成的Html里新添加了一个表格,这就是我们新添加的王大白同学,由此可知,放入模板里的Jar包只是一个模板,不管里面放几条数据,生成的二进制文件放到Java工程中都不会有传入数据条数的限制,即是你会传几条数据,就会生成几个表格。
-
顶
-
踩