报表开发工具FineReport的使用:EJB程序数据源

2025-10-28 03:54:54

1、实现原理

报表的数据来源可以是任何类型的数据,因为是通过AbstractTableData抽象类来读取数据源的,因此用户只要实现了 AbstractTableData抽象类,也就可以用自定义类型的程序数据集,FineReport报表引擎就能够读取定义的数据源作为报表数据源使 用。AbstractTableData抽象类主要有5个方法,具体使用可参考简单程序数据集实现原理文档。EJB程序数据源准备数据使用方法 init(),获取到ejb的javaBean,从而保存数据到ArrayList中。

2、定义程序数据源

定义DataModelDemo这个类代码如下:

package com.fr.data;import javax.naming.*;import javax.ejb.*;import java.rmi.*;import java.util.*;import com.fr.data.AbstractTableData;import examples.ejb.ejb20.basic.beanManaged.*;public class DataModelDemo extends AbstractTableData {    private String[] columnNames;    private ArrayList valueList = null;    public DataModelDemo() {        String[] columnNames = { "Name", "Score" };        this.columnNames = columnNames;    }    // 实现其他四个方法    public int getColumnCount() {        return columnNames.length;    }    public String getColumnName(int columnIndex) {        return columnNames[columnIndex];    }    public int getRowCount() {        init();        return valueList.size();    }    public Object getValueAt(int rowIndex, int columnIndex) {        init();        return ((Object[]) valueList.get(rowIndex))[columnIndex];    }    // 准备数据    public void init() {        // 确保只被执行一次        if (valueList != null) {            return;        }        // 保存得到的结果集        valueList = new ArrayList();        Context ctx = null;        Account ac = null;        AccountHome home = null;        try {            // Contact the AccountBean container (the "AccountHome") through            // JNDI.            ctx = new InitialContext();            home = (AccountHome) ctx                    .lookup("java:/comp/env/BeanManagedAccountEJB");            double balanceGreaterThan = 100;            Collection col = home.findBigAccounts(balanceGreaterThan);            if (col != null) {                // 用对象保存数据                Object[] objArray = null;               Iterator iter = col.iterator();                while (iter.hasNext()) {                    Account bigAccount = (Account) iter.next();                    objArray = new Object[2];                    objArray[0] = bigAccount.getPrimaryKey();                    objArray[1] = new Double(bigAccount.balance());                    // 在valueList中加入这一行数据                    valueList.add(objArray);                }            }        } catch (Exception ex) {            ex.printStackTrace();        }    }}

注:使用之前需要先导入ejb的jar包

另:最新的代码链接。

3、编译程序数据源

将编译后的 DataModelDemo.class放到项目的WEB-INF下面的classes目录下,因为DataModelDemo.java属于包 com.fr.data,所以DataModelDemo.class需要放到classes\com\fr\data目录下。

4、配置程序数据源

新建报表,在报表数据集中新建程序数据源,选择我们定义好的程序数据集,如下图,名字可以自定义,如Pro。

报表开发工具FineReport的使用:EJB程序数据源

5、使用程序数据源

配置好程序数据源后便可以使用定义的Pro程序数据集了,与其他类型的数据集使用方法是相同的,可以通过拖拽方法实现单元格数据列绑定。如下图

报表开发工具FineReport的使用:EJB程序数据源

6、保存模板到ejb项目环境下,启动Examples Server服务器,预览模板就可以成功访问到模板了!

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢