struts2+IReport开发报表可以使用哪几种数据源

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2+IReport开发报表可以使用哪几种数据源相关的知识,希望对你有一定的参考价值。

我知道可以使用javabean,hibernate查询,jdbc啊等等实现,想问的是可不可以使用xml作为数据源?需要怎么配置?由于只是想做一个静态的产品demo,数据库及后台均未开发,只写表示层的东东,所以构思了使用静态的XML作为报表的数据源,不知道struts2中应该如何配置或在action中怎么处理,求教高手了。
这我也想过,但是被我否了,原因是报表要显示的数据用javaBean的话一个bean中的属性实在太多了点,所以不想解析xml到bean中。求解struts2和jasperReport结合自身有没有方法绑定xml数据源。
如有demo发到邮箱:603893819@qq.com

你用javabean,构造出一个实例,肯定也是空的,然后通过数据库hibernate查出记录,然后把各个字段塞进javabean的属性里,以上是数据库做法;如果换做数据源,其实同理:把通过查完数据库后进行对javabean进行set的过程,换成读取XML内容,然后逐个塞进对应的属性里,XML用DOM4J这个第三方JAR,可以通过XML里对应的属性名来获取键值对这种内容,无非一个是rs.getString,另一个是xml解析后XML对象.getXXX方法
实例.setA(rs.getString(A))--数据库
document对象.getRootElement获取集合,然后迭代遍历这个集合,用键值对方法去取值
实例.setA(通过XX得到的值)--XML追问

额,这个我知道,主要是数据库未定,我这是为了做一个即将开发的产品demo,所以我就不想搞javabean。你这个方法还是绑定的javabean,难道struts和jasperReport结合就不能使用静态的xml作为数据源了么?又或者使用servlet调jasperreport的jar能够实现也好,有没有方法?

追答

觉得你是不是有点误区。javabean只是用来暂存数据的,无论你是从数据库读,还是从XML读,甚至你完全可以构造一个实例后直接往里塞写死的数据,都是一样的数据,最终的入口都是存进javabean里,就像多车道汇一车道。不管你什么途径,最终我认车的时候都是以车来做事,不管你是哪条道来的。同理你现在想做DEMO,想用框架直接展现效果,无非多做一个接口,把javabean读出来转成jasperreport需要的参数。能不能用,好不好转,这个是靠你javabean的设计的,单纯你目前的需求,你javabean甚至可以加一个wheresql的属性,到时候你直接获取出这个属性,直接传SQL到指定的接口里或者报表工具里,还不是你想怎么玩就怎么玩。总之javabean只是用于暂存数据的。将来接口好不好用,好不好写,实际看你DEMO的需求,好好设计下javabean的属性结构,方便你取想要的数据,这才是真的。取主键是取,取这个主键对应搜数据库的SQL语句难道就不能取了?只要对方接口用的到,你大可以规整下塞到javabean里

追问

谢谢你的热心,可能是我描述的不太清晰,但是还是谢谢了。

参考技术A domj解析XML就可以,在XML中写自己的数据节点 参考技术B 关注下 参考技术C 追问

就什么啊?

追答

2种

参考技术D mssql mysql

ireport中list组件的使用方法有哪些?

有一个需求需要用到多数据集的情况,我知道子报表和javabean方式可以解决,但是有没有其他办法?好像list可以用子数据集,但是怎么用的?

官方文档上sub-datasource用于子报表和crosstab,具体我也没用过。
我在开发中有一次用到了三个crosstab共享一个数据源,只对javabean的main datasource使用了filter进行过滤。
在javabean中定义一个flag字段,第一张报表只显示flag=1的;第二张只显示flag=2的。
只需要在控件中的filter expression那栏里面填 flag.equals('0')就ok

补充:iReport 是为JasperReports Library和JasperReports Server设计的报表可视化设计器。

参考技术A 官方文档上sub-datasource用于子报表和crosstab。
如果在开发中有一次用到了三个crosstab共享一个数据源,只对javabean的main datasource使用了filter进行过滤。
在javabean中定义一个flag字段
第一张报表只显示flag=1的
第二张只显示flag=2的。
只需要在控件中的filter expression那栏里面填 flag.equals('0')就行。
参考技术B 官方文档上sub-datasource用于子报表和crosstab,具体我也没用过。
我在开发中有一次用到了三个crosstab共享一个数据源,只对javabean的main datasource使用了filter进行过滤。
在javabean中定义一个flag字段,第一张报表只显示flag=1的;第二张只显示flag=2的。
只需要在控件中的filter expression那栏里面填 flag.equals('0')就ok本回答被提问者采纳

以上是关于struts2+IReport开发报表可以使用哪几种数据源的主要内容,如果未能解决你的问题,请参考以下文章

iReport的安装以及安装完成后出现闪退的解决

JasperReport子报表采用JavaBean做数据源的问题

ireport中list组件的使用方法有哪些?

ireport报表,打印时,报表加载失败的解决方法

jasperReport/iReport 子报表显示空白(未显示)

DynamicReport使用XML数据源+ireport的.jxml文件作为模板