在实际项目中,一般使用java对象作为数据源的方式更多,这种方式会更加灵活多变。对于mvc结构更为契合。上面介绍了用JDBC数据源时,用到了Fields对象。本篇主要是使用Fileds对象来匹配JavaBean对象。
5.1 在项目中新建user对象(添加get,set方法),结构如下:
5.2 新建报表模板DemoReport4.jrxml
5.2.1按照user对象新建Fileds(注意数据类型一致)
5.2.2 去掉多余的band,只保留Title,Detail,PageFooter。去掉band的前后距,步骤:模板(DemoReport4)右键 -> Show Propertes -> Page Format -> Edit Page Format
5.2.3 将Filed拖动到 Detail 1 Band。并设计模板,保持Filed的高与Detail Band的高一致
设置页码,打开组件面板 在Composite Elements栏找到Page Number 拖入到 Page Footer 中
保存,并将jrxml文件放入到项目webroot下新建的jrxml目录中。
5.3 编写servlet注入JavaBean数据源。新建JasperServlet3
5.3.1 JasperServlet3的doget如下:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Map<String,Object> parameters = new HashMap<String,Object>(16);
String jrxmlPath = request.getServletContext().getRealPath("/")+"/jrxml/DemoReport4.jrxml";
//由jrxml文件编译后生产jasper文件的路径
String jasperPath = request.getServletContext().getRealPath("/")+"/jasper/DemoReport4.jasper";
FileInputStream isRef = null;
ServletOutputStream sosRef = null;
try {
//编译jrxml生产jasper文件
JasperCompileManager.compileReportToFile(jrxmlPath, jasperPath);
isRef = new FileInputStream(new File(jasperPath));
sosRef = response.getOutputStream();
//组装list数据源
List<User> list = new ArrayList<User>();
for(int i = 1; i <= 100; i++) {
User user = new User(i,"小明"+i,18,i);
list.add(user);
}
//new JRBeanCollectionDataSource(list) 以javaBean为数据源注入报表数据
JasperRunManager.runReportToPdfStream(isRef, sosRef, parameters, new JRBeanCollectionDataSource(list));
response.setContentType("application/pdf");
} catch (JRException e) {
e.printStackTrace();
}finally {
sosRef.flush();
sosRef.close();
}
}
5.3.2 启动tomcat并访问