1. 程式人生 > >潤乾報表設計器中使用 spring 框架實現自定義資料集

潤乾報表設計器中使用 spring 框架實現自定義資料集

spring是一個開源框架,是為了解決企業應用程式開發複雜性而建立的。在 web 開發環境中經常會與 struts、hibernate聯合起來使用,進行規範的框架結構開發。潤乾中的二次開發也可以與 SSH 框架相結合部署到 web 專案中。本文介紹在設計時沒有啟動 web 服務,在設計器中使用 spring 的方式來實現自定義資料集。

實現思路:編寫兩個自定義資料集,一個在設計器中使用,一個在 web 專案中使用,在設計器中使用的類需要編寫臨時載入 spring 框架配置檔案的程式碼,啟動 spring 框架。Web 專案中的則不需要編寫,可直接與 struts 整合,通過監聽器的方式啟動 struts 框架時同時啟動 spring 框架。

第一步:拷貝 spring 框架 jar 包。

使用 spring 的注入方式編寫一個簡單的自定義資料集,首先需要將 spring 的 IOC 核心容器和對 web 支援的 jar 包拷貝到設計器的 lib 目錄下(\reportHome\designer\web\WEB-INF\lib)。

 

第二步:編寫一個簡單的自定義資料集。

 

public class Test {  

public DataSet getDataSet(Context ctx, DataSetConfig dsc, boolean retrieve) {  

DataSet ds = new DataSet(”ds1″);// 定義資料集名稱  

ds.addCol(”產品ID”);//定義顯示列  

ds.addCol(”產品名稱”);  

List col1 = new ArrayList();// 第一列模擬資料集合  

for (int i = 1; i <= 4; i++) {  

col1.add(i);  

}  

List col2 = new ArrayList();// 第二列模擬資料集合  

col2.add(”struts1.2″);  

col2.add(”hibernate3.1″);  

col2.add(”spring2.0″);  

col2.add(”runqian4.2.5″);  

// 設定資料  

for (int i = 0; i < col1.size(); i++) {  

Row row = ds.addRow();  

row.setData(1, col1.get(i));// 產品ID放到第一列的位置  

row.setData(2, col2.get(i));// 產品名稱放到第二列的位置  

}  

return ds;  

}  

 

}

 

第三步:進行 spring 注入。

將之前編寫的自定義資料集的類,通過 spring 注入的形式來實現,將 spring 的配置檔案 applicationContext.xml 放置在 classpath 中(也就是設計器中的 \reportHome\designer\web\WEB-INF\classes 目錄下)。使用 ApplicationContext 這個介面下的一個實現類 ClassPathXmlApplicationContext 來載入配置檔案,需要注意的是,這裡可以載入多個配置檔案,所以是以陣列形勢傳進的。在 applicationContext.xml 中新增節點,配置 spring 注入的程式碼,在類中使用 getBean() 方法,根據 xml 中 bean 節點的 id 屬性注入。返回的就是該類中定義的這個成員變量了,從而實現了 spring 注入功能。

 

Spring 配置檔案 applicationContext.xml 程式碼如下:

 

<?xml version=”1.0″ encoding=”UTF-8″?>  

< beans xmlns=”http://www.springframework.org/schema/beans”  

xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”  

xsi:schemaLocation=”http://www.springframework.org/schema/beans

 

http://www.springframework.org/schema/beans/spring-beans-2.0.xsd”>

 

<bean id=”Test” class=” com.runqian.Test”></bean>  

< bean id=”SpringTest” class=”com.runqian.SpringTest “>  

< property name=”test”>  

< ref bean=”Test” />  

< /property>  

< /bean>  

< /beans>

 

Spring 呼叫類程式碼如下:

 

public class SpringTest implements IDataSetFactory {  

private Test test;  

public SpringTest () {  

}  

public void setTest(Test test) {  

this.test = test;  

}  

public DataSet createDataSet(Context ctx, DataSetConfig dsc,  

boolean retrieve) {  

ApplicationContext cxt = new ClassPathXmlApplicationContext(  

new String\[\] { “applicationContext.xml” });//手動載入配置檔案  

test = (Test) cxt.getBean(”Test”);//載入之前定義好的自定義資料集類  

return test.getDataSet(ctx, dsc, retrieve);  

}  

}

 

將之前編寫的自定義資料集和 spring 呼叫類編譯後,把.class 檔案放到設計器中的 \reportHome\designer\web\WEB-INF\classes 目錄下 (主意加上包檔案)

第四步:啟動設計器實現自定義資料集。

開啟設計器,選擇自定義資料集,填入 spring 呼叫類的包名和類名

顯示出之前類中定義的列名,生成資料整合功

 

這樣就實現了不啟動 web 服務,在設計器中使用 spring 框架實現自定義資料集了。