版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、使用eclipse在jsp上顯示水晶報(bào)表(轉(zhuǎn)) 2008-09-10 20:23:32| 分類: Java | 標(biāo)簽: |舉報(bào) |字號(hào)大中小 訂閱 我使用的開發(fā)IDE是eclipse3.2,服務(wù)器是tomcat5.5新建一個(gè) Crystal reports web項(xiàng)目在Target runtime選擇apache tomcat v5.5下一步中crystal reports java reporting component、dynamic web module、java是默認(rèn)選中的,這三個(gè)是必需的,你也可添加strut
2、s,后面的設(shè)置會(huì)要求你添加struts的類庫。在最后面默認(rèn)加入示例的數(shù)據(jù)庫和報(bào)表。這樣一個(gè)Crystal Reports web項(xiàng)目就建立了(上面的步驟應(yīng)該是地球人都可以完成吧)在里面有個(gè)CrystalReport1.rpt和CrystalReport_viewer.jsp右鍵CrystalReport_viewer.jsp>運(yùn)行方式->Run on Server,點(diǎn)擊完成。你應(yīng)該就可以看到一個(gè)空的水晶報(bào)表了吧(為什么空的,當(dāng)然啦,CrystalReport1.rpt本身是空的)在看看sample reports文件夾里面,有4個(gè)示例的.rpt報(bào)表文件,右擊其中任何一個(gè),選中Cry
3、stal Reports創(chuàng)建查看器JSP,就會(huì)創(chuàng)建一個(gè)*viewer.jsp文件。運(yùn)行這個(gè)文件,你應(yīng)該可以看到一個(gè)水晶報(bào)表了吧。我想這對(duì)大部分人應(yīng)該都是沒有問題的,剩下的事情就是好好分析這個(gè)項(xiàng)目里面所有的東東了-上面什么東西是在任何項(xiàng)目中實(shí)現(xiàn)都必須的呢?為此我特意建立一個(gè)新的tomcat項(xiàng)目,最好建一個(gè)簡(jiǎn)單的jsp頁面測(cè)試下你的tomcat項(xiàng)目是否可以正常運(yùn)行.通過本人的實(shí)驗(yàn),在其他項(xiàng)目中JSP運(yùn)行水晶報(bào)表的話,需要的類文件跟配置.1. 添加一個(gè)用戶庫如 CrystalReports Libraries,把下面的*.jar添加進(jìn)去commons-collections-3.1.jar,comm
4、ons-configuration-1.2.jar,commons-lang-2.1.jar,commons-logging.jar,Concurrent.jar,CrystalCharting.jarCrystalCommon.jarCrystalContentModels.jarCrystalDatabaseConnectors.jarCrystalExporters.jarCrystalExportingBase.jarCrystalFormulas.jarCrystalQueryEngine.jarCrystalReportEngine.jarCrystalReportingCommo
5、n.jarderby.jaricu4j.jarjrcadapter.jarjrcerom.jarkeycodeDecoder.jarlog4j.jarMetafileRenderer.jarmsbase.jarmssqlserver.jarmsutil.jarrasapp.jarrascore.jarReportPrinter.jarrpoifs.jarserialization.jarURIUtil.jarwebreporting.jarwebreporting-jsf.jarxercesImpl.jarxml-apis.jarXtreme.jar(總共36個(gè)jar,里面有一些在其他的庫已經(jīng)
6、有的了,在項(xiàng)目中添加這個(gè)自定義庫就行了)2. 把上個(gè)例子中的crystalreportviewers文件夾放在WEB-INF文件夾同一目錄下。這個(gè)就是你能看到水晶報(bào)表的基本框架,相當(dāng)于.net里面的水晶報(bào)表控件了的源代碼了。3. 把crystal-tags-reportviewer.tld放在WEB-INF下,主要標(biāo)簽4. web.xml 在<web-app>中間添加,主要是讀入crystalreportviewers <context-param> <param-name
7、>crystal_image_uri</param-name> <param-value>crystalreportviewers</param-value> </context-param> <context-param> <param-name>crystal_image_use_re
8、lative</param-name> <param-value>webapp</param-value> </context-param>5. 把CRConfig.xml放在src文件夾下,水晶報(bào)表的配置文件,如果你有注冊(cè),注冊(cè)碼也會(huì)在這文件里面CRConfig.xml<?xml version="1.0" encoding="UTF-8"?><Cr
9、ystalReportEngine-configuration> <reportlocation>./.</reportlocation> <timeout>0</timeout> <ExternalFunctionLibraryClassNames> <classname/> </
10、ExternalFunctionLibraryClassNames></CrystalReportEngine-configuration>配置超時(shí)間隔利用 CRConfig.xml 文件,您可以配置確定何時(shí)丟棄不活動(dòng)報(bào)表源的超時(shí)間隔(以分鐘為單位)。這是必要的,因?yàn)椴换顒?dòng)報(bào)表源仍然會(huì)消耗系統(tǒng)資源(如數(shù)據(jù)庫連接、服務(wù)器內(nèi)存以及臨時(shí)文件使用的磁盤空間)。可以通過在 CRConfig.xml 文件中設(shè)置 timeout 標(biāo)記的值來指定超時(shí)間隔。默認(rèn)情況下,超時(shí)間隔為 10 分鐘。通過將該值設(shè)置為 0,可以將 Java Reporting Component 配置為沒有超時(shí)。超時(shí)間
11、隔僅適用于不活動(dòng)報(bào)表 - 正在處理的報(bào)表不會(huì)因超出此值而超時(shí)。每次成功完成一個(gè)報(bào)表源請(qǐng)求時(shí),超時(shí)定時(shí)器將會(huì)重置。如果在超時(shí)間隔內(nèi)沒有使用某個(gè)報(bào)表源,則會(huì)丟棄該報(bào)表源,并將其資源提供給其他進(jìn)程使用。6. 在jsp頁面插入這段代碼<% taglib uri="/crystal-tags-reportviewer.tld" prefix="crviewer" %><crviewer:viewer reportSourceType="reportingComponent" viewerName=&qu
12、ot;rcname-viewer" reportSourceVar="rcname" isOwnPage="true"><crviewer:report reportName="rcname.rpt" /></crviewer:viewer>感覺像在用.net里面的水晶報(bào)表控件一樣,不只viewer,連partviewer也可以的.在(一)中的配置保持不變,前一篇是用crviewer標(biāo)簽來實(shí)現(xiàn)jsp顯示水晶報(bào)表的這篇文章教你如何自己寫代碼來享受水晶報(bào)表的report_source.jsp<
13、%page contentType="text/html"%><%page pageEncoding="UTF-8"%><%/Crystal Java Reporting Component (JRC) imports.%><%- jrcerom.jar-%><%page import="com.crystaldecisions.reports.sdk.*" %><%- rascore.jar-%><%page import="com.crystalde
14、cisions.sdk.occa.report.lib.*" %><%/水晶報(bào)表的位置final String REPORT_NAME = "view_report.rpt"%><%try . /打開報(bào)表 ReportClientDocument reportClientDoc = new ReportClientDocument(); reportCl
15、ientDoc.open(REPORT_NAME, 0); /把報(bào)表源放進(jìn)session,傳遞到報(bào)表顯示頁面 session.setAttribute("reportSource", reportClientDoc.getReportSource(); /轉(zhuǎn)到報(bào)表顯示頁面 response.se
16、ndRedirect("CrystalReportViewer.jsp"); catch(ReportSDKException ex) . out.println(ex);catch(Exception ex) . out.println(ex);
17、; %>上面的可以封裝到j(luò)avabean里面reportClientDoc.getDatabaseController().logon(USERNAME, PASSWORD);設(shè)置數(shù)據(jù)庫的登陸用戶,如果瀏覽這個(gè)報(bào)表的用戶需要設(shè)置不同的權(quán)限的話,那就需要設(shè)置上面這個(gè)了CrystalReportViewer.jsp<%page contentType="text/html"%><%page pageEncoding="UTF-8"%><%/Crystal Report View
18、er imports.%><%- webreporting.jar-%><%page import="com.crystaldecisions.report.web.viewer.*"%><%- rascore.jar-%><%page import="com.crystaldecisions.reports.sdk.*" %><%/建立一個(gè)viewer對(duì)象實(shí)例,并設(shè)置CrystalReportViewer viewer = new CrystalReportViewer();viewer.se
19、tOwnPage(true);viewer.setOwnForm(true);viewer.setPrintMode(CrPrintMode.ACTIVEX);/從session中取報(bào)表源Object reportSource = session.getAttribute("reportSource");viewer.setReportSource(reportSource);/顯示水晶報(bào)表cessHttpRequest(request, response,this. getServletConfig().getServletContext(), nul
20、l); %>第二種方法直接用一個(gè)頁面CrystalReportViewer.jsp<%page contentType="text/html"%><%page pageEncoding="UTF-8"%><%/Crystal Java Reporting Component (JRC) imports.%><%- jrcerom.jar-%><%page import="com.crystaldecisions.reports.sdk.*" %><%- rasco
21、re.jar-%><%page import="com.crystaldecisions.sdk.occa.report.lib.*" %><%- webreporting.jar-%><%page import="com.crystaldecisions.report.web.viewer.*"%><%/水晶報(bào)表的位置final String REPORT_NAME = "view_report.rpt"%><%try .
22、160; /打開報(bào)表 ReportClientDocument reportClientDoc = new ReportClientDocument(); reportClientDoc.open(REPORT_NAME, 0); /把報(bào)表源放進(jìn)session,傳遞到報(bào)表顯示頁面 /session.setAttribute("reportSource",
23、reportClientDoc.getReportSource(); /建立一個(gè)viewer對(duì)象實(shí)例,并設(shè)置 CrystalReportViewer viewer = new CrystalReportViewer(); viewer.setOwnPage(true); viewer.setOwnForm(true); viewer.setPrintMode(
24、CrPrintMode.ACTIVEX); /從session中取報(bào)表源 /Object reportSource = session.getAttribute("reportSource"); /viewer.setReportSource(reportSource); viewer.setReportSource(reportClientDoc.getReportSource();
25、60; /顯示水晶報(bào)表 cessHttpRequest(request, response,this. getServletConfig().getServletContext(), null); /轉(zhuǎn)到報(bào)表顯示頁面 /response.sendRedirect("Cryst
26、alReportViewer.jsp"); catch(ReportSDKException ex) . out.println(ex);catch(Exception ex) . out.println(ex); %>個(gè)人感覺
27、第一種方法好,報(bào)表源跟顯示分開,安全,重用方便在.net中,你可以很容易的用sql語句過濾報(bào)表數(shù)據(jù),但在CR4E中沒這樣的功能設(shè)定,但可以通過編寫代碼完成。這里是我做的簡(jiǎn)單用sql語句過濾數(shù)據(jù)的例子。項(xiàng)目還是用 錈嫻膖omcat項(xiàng)目。建一個(gè)實(shí)現(xiàn)這個(gè)功能的類JRC_ResultSet_DataSource.javapackage com.JRC.util;import java.sql.*;import javax.servlet.http.*;import com.crystaldecisions.reports.sdk.*;import com.crystaldecisions.sdk.oc
28、ca.report.lib.*;public class JRC_ResultSet_DataSource . private String REPORT_NAME="" public JRC_ResultSet_DataSource(String report_name). this.REPORT_NAME=report
29、_name; /* */* * return rEPORT_NAME */ public String getREPORT_NAME() . return REPORT_NAME;
30、60; /* */* * param report_name 要設(shè)置的 rEPORT_NAME */ public void setREPORT_NAME(String report_name) . REPORT_NAME = report_name;
31、160; /* */* * 連接數(shù)據(jù)庫,通過sql查詢語句進(jìn)行查詢,返回結(jié)果集 */ private static ResultSet getResultSetFromQuery(String query, int scrollType)
32、0; throws SQLException, ClassNotFoundException . Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); final String DBUSERNAME = "username"
33、160; final String DBPASSWORD = "password" final String CONNECTION_URL = "jdbc:microsoft:sqlserver:/localhost:1433;database=dname"
34、60; java.sql.Connection connection = DriverManager.getConnection(CONNECTION_URL, DBUSERNAME, DBPASSWORD); Statement statement = connection.createStatement(scrollType, ResultSet.CONCUR_READ_ONLY);
35、160; return statement.executeQuery(query); /* */* * 通過sql語句過濾報(bào)表數(shù)據(jù),在.net就不用怎么慘了 */ public boolean isReportSource
36、InSession(String session_name,HttpSession session) throws ReportSDKException, SQLException, ClassNotFoundException. boolean flag=false; try .
37、; /打開水晶報(bào)表 ReportClientDocument reportClientDoc = new ReportClientDocument(); reportClientDoc.open(REPORT_NAME, 0); &
38、#160; /sql查詢語句,返回的字段數(shù)必須跟報(bào)表里面的一樣,不能多也不能少,并且字段的類型要跟報(bào)表的一樣,其他不管是什么數(shù)據(jù)都可以 /from 表這里要填完整,如數(shù)據(jù)庫名.dbo.數(shù)據(jù)庫表,最好做個(gè)別名 String query
39、 = "select tt.test_1,tt.test_2,tt.test_3,tt.test_4 from dname.dbo.test tt" ResultSet resultSet = this.getResultSetFromQuery(query,ResultSet.TYPE_S
40、CROLL_INSENSITIVE); String tableAlias = reportClientDoc.getDatabaseController().getDatabase().getTables().getTable(0).getAlias(); /把結(jié)
41、果集放進(jìn)報(bào)表里,將會(huì)自動(dòng)產(chǎn)生一個(gè)datasource reportClientDoc.getDatabaseController().setDataSource(resultSet,tableAlias, "resultsetTable"); session.setAttribute(ses
42、sion_name, reportClientDoc.getReportSource(); flag=true; return flag; catch (Exception e) .
43、 / TODO: handle exception e.printStackTrace(); return flag;
44、60; 這里要注意數(shù)據(jù)庫查詢結(jié)果集的字段數(shù)目要跟報(bào)表里面的字段數(shù)目一樣,類型也要一樣,不然就會(huì)出錯(cuò)。sql語句中的表的名字要完整,如數(shù)據(jù)庫名.dbo.數(shù)據(jù)庫表,最好做個(gè)別名顯示頁面Result_viewer.jsp<%page import="com.JRC.util.JRC_ResultSet_DataSource" %>
45、<%-webreporting.jar -%><%page import="com.crystaldecisions.report.web.viewer.*" %><%-jrcerom.jar -%><% page import="com.crystaldecisions.reports.sdk.*" %><% JRC_ResultSet_DataSource jrcd=new JRC
46、_ResultSet_DataSource("resultSet.rpt"); if(!jrcd.isReportSourceInSession("reportSource",session) response.sendRedirect("error.html"); CrystalReportViewer crViewer=new CrystalR
47、eportViewer(); crViewer.setOwnPage(true); crViewer.setOwnForm(true); crViewer.setPrintMode(CrPrintMode.ACTIVEX); Object reportSource=session.getAttribute("reportSource");
48、 crViewer.setReportSource(reportSource); crVcessHttpRequest(request,response,this.getServletConfig().getServletContext(),null);%>注意上面幾點(diǎn)應(yīng)該就沒問題了PS:Snippets視圖最下面有Crystal reports的一些實(shí)用代碼段CR查看器標(biāo)記、打開并查詢報(bào)表、打開報(bào)表、查看報(bào)表、查看報(bào)表并設(shè)置數(shù)
49、據(jù)庫登錄、將報(bào)表導(dǎo)出為pdf、將報(bào)表導(dǎo)出為rtf 等的代碼段,簡(jiǎn)單易用在eclipse中怎么把POJO插入到水晶報(bào)表里面呢?這就是第四篇的所要做的首先,應(yīng)該就是要建立一個(gè)實(shí)體類了。我這里用一個(gè)OrderItems.java做例子,代碼package com.JRC.beans;public class OrderItems . public int id;
50、160; /對(duì)應(yīng)數(shù)據(jù)庫表的id public int quantity; &
51、#160;/產(chǎn)品數(shù)量,數(shù)據(jù)庫表所沒有的 public OrderItems(int id, int quantity) . super(); this.id = id; this.quantity = quantity; &
52、#160; /* */* * return id */ public int getId() . return id; /* */* * pa
53、ram id 要設(shè)置的 id */ public void setId(int id) . this.id = id; /* */* * return quantity */
54、 public int getQuantity() . return quantity; /* */* * param quantity 要設(shè)置的 quantity */ public void setQuantity(int quantity) . this.quantity = quantity; 如果你還沒建好報(bào)表,新建一個(gè)報(bào)表如Report.r
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 服裝行業(yè)面料設(shè)計(jì)師培訓(xùn)心得
- 急診搶救科護(hù)士的工作總結(jié)
- 造紙行業(yè)工程師工作總結(jié)
- 農(nóng)業(yè)行業(yè)銷售工作總結(jié)
- 紡織服裝行業(yè)營業(yè)員工作總結(jié)
- 科研行業(yè)前臺(tái)工作總結(jié)
- 服裝行業(yè)人才招聘實(shí)例總結(jié)
- 藝術(shù)行業(yè)行政后勤工作總結(jié)
- 《管教兒女的智慧》課件
- 《心力衰竭護(hù)理》課件
- 政治經(jīng)濟(jì)學(xué)結(jié)構(gòu)圖解
- LORCH焊機(jī)簡(jiǎn)要操作說明書-v2.1
- 服裝品質(zhì)管理人員工作手冊(cè)
- 國家開放大學(xué)電大??啤东F醫(yī)基礎(chǔ)》2023-2024期末試題及答案試卷編號(hào):2776
- 煤氣全分析,簡(jiǎn)、精兩配方
- 初三畢業(yè)班后期管理措施
- 超星爾雅慕課公共關(guān)系禮儀實(shí)務(wù)杜漢榮課后習(xí)題及答案(1)word版本
- 示教機(jī)械手控制系統(tǒng)設(shè)計(jì)
- 氧化鋁生產(chǎn)工藝教學(xué)(拜耳法)
- 選礦學(xué)基礎(chǔ)PPT課件
- 安利食品經(jīng)銷商合同協(xié)議范本模板
評(píng)論
0/150
提交評(píng)論