使用Parameters参数对象传递字符串的示例,本节将演示打印List接口中Userinfo.java实体类的示例,打印的数据源不是来自于Parameters对象,而是JRBeanCollectionDataSource对象。
新建Web项目,创建Userinfo.java实体类,结构如图1.45所示。
然后把Userinfo.class的路径配置到iReport软件中,如图1.46所示。
单击 按钮添加数据源,选择JavaBean,并且设置选项如图1.47所示
单击OK按钮后Fields节点下出现3个字段名称,如图1.48所示。
把这3个Fields对象添加到报表模板,如图1.49所示。
字段id、username及password的值来自于List中的Userinfo.java实体类,而List就是打印报表的数据源,创建Servlet核心代码如下:
@WebServlet("/demo4")public class Demo4Servlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { List listUserinfo = new ArrayList(); for (int i = 0; i < 100; i++) { listUserinfo.add(new UserInfo("id" + (i + 1), "username" + (i + 1), "password" + (i + 1))); } String jrxmlSourcePath = this.getServletContext().getRealPath("/") + "report3.jrxml"; System.out.println(jrxmlSourcePath); String jrxmlDestSourcePath = this.getServletContext().getRealPath("/")+"listUserinfo.jasper"; JasperCompileManager.compileReportToFile(jrxmlSourcePath, jrxmlDestSourcePath); InputStream isRef = new FileInputStream(new File(jrxmlDestSourcePath)); ServletOutputStream sosRef = response.getOutputStream(); response.setContentType("application/pdf"); JasperRunManager.runReportToPdfStream(isRef, sosRef, new HashMap(), new JRBeanCollectionDataSource(listUserinfo)); sosRef.flush(); sosRef.close(); } catch (JRException e) { // TODO Auto-generated catch block e.printStackTrace(); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }
程序运行的效果如图1.50所示: