在JasperReport中填充JavaBean(4)

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

posted on 2016-02-02 21:33  liujie037  阅读(2289)  评论(0编辑  收藏  举报

导航