在实际项目中,一般使用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并访问