使用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所示: