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