<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java軟件報(bào)表軟件技術(shù)博客

    java報(bào)表軟件技術(shù)匯總 java報(bào)表軟件制作 報(bào)表軟件新聞
    posts - 355, comments - 100, trackbacks - 0, articles - 3
       :: 首頁(yè) :: 新隨筆 ::  :: 聚合  :: 管理

    我們前面講了幾個(gè)數(shù)據(jù)源,今天我們來(lái)講一下EJB數(shù)據(jù)源,這篇講完我們數(shù)據(jù)源這部分就講完了。數(shù)據(jù)連接不需要直接訪問(wèn)數(shù)據(jù)庫(kù),而是使用EJB做為數(shù)據(jù)源。FR通過(guò)定義程序數(shù)據(jù)集使用EJB的相關(guān)類(lèi)獲取到EJB數(shù)據(jù)源,然后轉(zhuǎn)為我們里面的二維表作為報(bào)表數(shù)據(jù)源使用,進(jìn)行展示。例如如下獲取到ejb數(shù)據(jù)所做的模板。

    一、 實(shí)現(xiàn)原理

    FineReport報(bào)表的數(shù)據(jù)來(lái)源可以是任何類(lèi)型的數(shù)據(jù),因?yàn)镕ineReport是通過(guò)AbstractTableData抽象類(lèi)來(lái)讀取數(shù)據(jù)源的,因此用戶(hù)只要實(shí)現(xiàn)了AbstractTableData抽象類(lèi),也就可以用自定義類(lèi)型的程序數(shù)據(jù)集,F(xiàn)ineReport報(bào)表引擎就能夠讀取定義的數(shù)據(jù)源作為報(bào)表數(shù)據(jù)源使用。AbstractTableData抽象類(lèi)主要有5個(gè)方法,具體使用可參考報(bào)表引擎API開(kāi)發(fā)入門(mén)—簡(jiǎn)單程序數(shù)據(jù)集。EJB程序數(shù)據(jù)源準(zhǔn)備數(shù)據(jù)使用方法init(),獲取到ejb的javaBean,從而保存數(shù)據(jù)到ArrayList中。

    二、 實(shí)現(xiàn)步驟

    2.1 定義程序數(shù)據(jù)源
    定義DataModelDemo這個(gè)類(lèi)代碼如下:

    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;
        }
        
    // 實(shí)現(xiàn)其他四個(gè)方法
        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];
        }
        
    // 準(zhǔn)備數(shù)據(jù)
        public void init() {
            
    // 確保只被執(zhí)行一次
            if (valueList != null) {
                
    return;
            }
            
    // 保存得到的結(jié)果集
            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) {
                    
    // 用對(duì)象保存數(shù)據(jù)
                    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中加入這一行數(shù)據(jù)
                        valueList.add(objArray);
                    }
                }
            } 
    catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }

    注:使用之前需要先導(dǎo)入ejb的jar包
    2.2 編譯程序數(shù)據(jù)源
    將編譯后的DataModelDemo.class放到項(xiàng)目的WEB-INF下面的classes目錄下,因?yàn)镈ataModelDemo.java屬于包c(diǎn)om.fr.data,所以DataModelDemo.class需要放到classes\com\fr\data目錄下。
    2.3 配置程序數(shù)據(jù)源
    新建報(bào)表,在報(bào)表數(shù)據(jù)集中新建程序數(shù)據(jù)源,選擇我們定義好的程序數(shù)據(jù)集,如下圖,名字可以自定義,如Pro。

    2.4 使用程序數(shù)據(jù)源
    配置好程序數(shù)據(jù)源后便可以使用定義的Pro程序數(shù)據(jù)集了,與其他類(lèi)型的數(shù)據(jù)集使用方法是相同的,可以通過(guò)拖拽方法實(shí)現(xiàn)單元格數(shù)據(jù)列綁定。如下圖

    保存模板到ejb項(xiàng)目環(huán)境下,啟動(dòng)Examples Server服務(wù)器,預(yù)覽模板就可以成功訪問(wèn)到模板了!




    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产亚洲成人久久| va天堂va亚洲va影视中文字幕 | 毛片在线免费视频| 久久亚洲中文字幕无码| 91手机看片国产永久免费| 亚洲AV综合色区无码一二三区| 在线观看午夜亚洲一区| 曰批免费视频播放在线看片二| 亚洲av午夜成人片精品网站| 97人伦色伦成人免费视频| 精品熟女少妇aⅴ免费久久| 亚洲精品国产福利在线观看| 国产一级做a爱免费视频| 一级毛片在线免费看| 亚洲精品人成在线观看| 日本一卡精品视频免费| 亚洲爆乳大丰满无码专区| 久久亚洲AV无码精品色午夜麻| 国内精品免费在线观看| 亚洲人成电影网站免费| 久久亚洲国产精品五月天| 国产一区视频在线免费观看| 2019中文字幕免费电影在线播放| 三级片免费观看久久| 亚洲视频无码高清在线| 久久亚洲一区二区| 国产亚洲美日韩AV中文字幕无码成人 | 亚洲乱码日产精品一二三| 日韩亚洲AV无码一区二区不卡| 亚洲欧洲久久av| 在线观看永久免费视频网站| 亚洲黄色免费电影| 国色精品va在线观看免费视频| 亚洲成AV人片在线观看无| www国产亚洲精品久久久日本| EEUSS影院WWW在线观看免费| 亚洲欧美不卡高清在线| 亚洲冬月枫中文字幕在线看 | 黄网站色成年片大免费高清| 亚洲中文字幕在线无码一区二区 | 久久精品国产亚洲综合色|