开发者使用JasperReport——不同数据源之实体对象数据源
2013-04-24 20:20
447 查看
前言
上一篇我们使用了JRMapArrayDataSource数据源来与数据库进行交互,今天我们来介绍下如何使用实体对象作为数据源。
正题
跟之前的一样,我们要生成报表需要以下几个步骤:
1.引入jar包,请看《静态文本报表》
。
2.新建报表模版:
跟我们前一篇的AircraftReport报表模版是一样的,请参见《不同数据源之Map数据源》;
3.编译报表模版,请看《静态文本报表》。
4.编写实体对象:
作为数据源的实体对象需要注意:
1)不能有公共的属性。
2)必须有一个无参数的构造方法。
3)所有的属性必须要有getter和stter方法。
我们新建一个AircraftData(因为报表模版中的字段是大写的,所以这里面的字段也定义的大写的):
package com.dan.jasper;
public class AircraftData {
public AircraftData(String id,String name,String sex){
setID(id);
setNAME(name);
setSEX(sex);
}
public AircraftData(){
}
private String ID;
private String NAME;
private String SEX;
public String getID() {
return ID;
}
public void setID(String iD) {
ID = iD;
}
public String getNAME() {
return NAME;
}
public void setNAME(String nAME) {
NAME = nAME;
}
public String getSEX() {
return SEX;
}
public void setSEX(String sEX) {
SEX = sEX;
}
}
5.编写servlet:
由于实体对象数据源分为两种JRBeanArrayDataSource和JRBeanCollectionDataSource,下面将这两种形式都写出来:
1)JRBeanArrayDataSource:
2)JRBeanCollectionDataSource:
package com.dan.servlet;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import com.dan.jasper.AircraftData;
/**
* 使用javabean作为数据源
* @author zdd
*
*/
public class BeanCollectionDSReportServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 2174316885912562306L;
private JRDataSource createReportDataSource(){
JRBeanCollectionDataSource dataSource;
Collection resportRows = initializeMapArray();
dataSource = new JRBeanCollectionDataSource(resportRows);
return dataSource;
}
private Collection initializeMapArray(){
ArrayList reportRows = new ArrayList();
reportRows.add(new AircraftData("n0", "zddn0", "female"));
reportRows.add(new AircraftData("n1", "zddn1", "female"));
reportRows.add(new AircraftData("n2", "zddn2", "female"));
reportRows.add(new AircraftData("n3", "zddn3", "female"));
return reportRows;
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
ServletOutputStream servletOutputStream = resp.getOutputStream();
InputStream reportStream = getServletConfig().getServletContext().getResourceAsStream("/WEB-INF/classes/reports/AircraftReport.jasper");
try{
JRDataSource dataSource = createReportDataSource();
JasperRunManager.runReportToPdfStream(reportStream,servletOutputStream,new HashMap(),dataSource );
resp.setContentType("application/pdf");
servletOutputStream.flush();
servletOutputStream.close();
}catch(Exception e){
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
e.printStackTrace(printWriter);
resp.setContentType("text/plain");
resp.getOutputStream().print(stringWriter.toString());
}
}
}
5.配置web.xml,就是配置servlet
6.运行项目
看一下我的运行结果:
1)JRBeanArrayDataSource:
2)JRBeanCollectionDataSource
小结:
其实这个实体对象作为数据源对于我们来说是很常用的,因为我们现在都是使用的hibernate,所以我们都会避免在其他地方直接与数据库进行交互,而这个对于实体对象数据源的支持满足了我们的要求。
上一篇我们使用了JRMapArrayDataSource数据源来与数据库进行交互,今天我们来介绍下如何使用实体对象作为数据源。
正题
跟之前的一样,我们要生成报表需要以下几个步骤:
1.引入jar包,请看《静态文本报表》
。
2.新建报表模版:
跟我们前一篇的AircraftReport报表模版是一样的,请参见《不同数据源之Map数据源》;
3.编译报表模版,请看《静态文本报表》。
4.编写实体对象:
作为数据源的实体对象需要注意:
1)不能有公共的属性。
2)必须有一个无参数的构造方法。
3)所有的属性必须要有getter和stter方法。
我们新建一个AircraftData(因为报表模版中的字段是大写的,所以这里面的字段也定义的大写的):
package com.dan.jasper;
public class AircraftData {
public AircraftData(String id,String name,String sex){
setID(id);
setNAME(name);
setSEX(sex);
}
public AircraftData(){
}
private String ID;
private String NAME;
private String SEX;
public String getID() {
return ID;
}
public void setID(String iD) {
ID = iD;
}
public String getNAME() {
return NAME;
}
public void setNAME(String nAME) {
NAME = nAME;
}
public String getSEX() {
return SEX;
}
public void setSEX(String sEX) {
SEX = sEX;
}
}
5.编写servlet:
由于实体对象数据源分为两种JRBeanArrayDataSource和JRBeanCollectionDataSource,下面将这两种形式都写出来:
1)JRBeanArrayDataSource:
package com.dan.servlet; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.io.StringWriter; import java.util.HashMap; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.JasperRunManager; import net.sf.jasperreports.engine.data.JRBeanArrayDataSource; import com.dan.jasper.AircraftData; /** * 使用javabean作为数据源 * @author zdd * */ public class BeanArrayDSReportServlet extends HttpServlet { /** * */ private static final long serialVersionUID = 2174316885912562306L; private JRDataSource createReportDataSource(){ JRBeanArrayDataSource dataSource; AircraftData[] resportRows = initializeMapArray(); dataSource = new JRBeanArrayDataSource(resportRows); return dataSource; } private AircraftData[] initializeMapArray(){ AircraftData[] reportRows = new AircraftData[4]; reportRows[0] = new AircraftData("n0", "zddn0", "female"); reportRows[1] = new AircraftData("n1", "zddn1", "female"); reportRows[2] = new AircraftData("n2", "zddn2", "female"); reportRows[3] = new AircraftData("n3", "zddn3", "female"); return reportRows; } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletOutputStream servletOutputStream = resp.getOutputStream(); InputStream reportStream = getServletConfig().getServletContext().getResourceAsStream("/WEB-INF/classes/reports/AircraftReport.jasper"); try{ JRDataSource dataSource = createReportDataSource(); JasperRunManager.runReportToPdfStream(reportStream,servletOutputStream,new HashMap(),dataSource ); resp.setContentType("application/pdf"); servletOutputStream.flush(); servletOutputStream.close(); }catch(Exception e){ StringWriter stringWriter = new StringWriter(); PrintWriter printWriter = new PrintWriter(stringWriter); e.printStackTrace(printWriter); resp.setContentType("text/plain"); resp.getOutputStream().print(stringWriter.toString()); } } }
2)JRBeanCollectionDataSource:
package com.dan.servlet;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import com.dan.jasper.AircraftData;
/**
* 使用javabean作为数据源
* @author zdd
*
*/
public class BeanCollectionDSReportServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 2174316885912562306L;
private JRDataSource createReportDataSource(){
JRBeanCollectionDataSource dataSource;
Collection resportRows = initializeMapArray();
dataSource = new JRBeanCollectionDataSource(resportRows);
return dataSource;
}
private Collection initializeMapArray(){
ArrayList reportRows = new ArrayList();
reportRows.add(new AircraftData("n0", "zddn0", "female"));
reportRows.add(new AircraftData("n1", "zddn1", "female"));
reportRows.add(new AircraftData("n2", "zddn2", "female"));
reportRows.add(new AircraftData("n3", "zddn3", "female"));
return reportRows;
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
ServletOutputStream servletOutputStream = resp.getOutputStream();
InputStream reportStream = getServletConfig().getServletContext().getResourceAsStream("/WEB-INF/classes/reports/AircraftReport.jasper");
try{
JRDataSource dataSource = createReportDataSource();
JasperRunManager.runReportToPdfStream(reportStream,servletOutputStream,new HashMap(),dataSource );
resp.setContentType("application/pdf");
servletOutputStream.flush();
servletOutputStream.close();
}catch(Exception e){
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
e.printStackTrace(printWriter);
resp.setContentType("text/plain");
resp.getOutputStream().print(stringWriter.toString());
}
}
}
5.配置web.xml,就是配置servlet
6.运行项目
看一下我的运行结果:
1)JRBeanArrayDataSource:
2)JRBeanCollectionDataSource
小结:
其实这个实体对象作为数据源对于我们来说是很常用的,因为我们现在都是使用的hibernate,所以我们都会避免在其他地方直接与数据库进行交互,而这个对于实体对象数据源的支持满足了我们的要求。
相关文章推荐
- 开发者使用JasperReport——不同数据源之实体对象数据源
- 开发者使用JasperReport——不同数据源之自定义数据源
- 开发者使用JasperReport——不同数据源之Map数据源
- 开发者使用JasperReport——不同数据源之表格数据源
- 开发者使用JasperReport——不同数据源之XML和CSV数据源
- 开发者使用JasperReport——不同数据源之Map数据源
- 开发者使用JasperReport——不同数据源之XML和CSV数据源
- 开发者使用JasperReport——不同数据源之表格数据源
- 开发者使用JasperReport——不同数据源之自定义数据源
- 开发者使用JasperReport——通过数据源生成报表
- 开发者使用JasperReport——通过数据源生成报表
- 开发者使用JasperReport——查询数据库
- 开发者使用JasperReport——带参数查询数据库
- 开发者使用JasperReport——静态文本报表
- 开发者使用JasperReport——带参数查询数据库
- ireport+jasperreport开源报表中使用javabean作为数据源的详细实现过程
- jasperreport生成html,Excel,PDF报表,数据源使用List
- (已测试)在本地处理模式下将业务对象数据源与 ReportViewer Web 服务器控件一起使用
- 开发者使用JasperReport——报表输出到网页
- 当使用EntityDataSource作为GridView的数据源时,在RowDataBound事件处理方法中得到对应当前行的实体对象