1. 緩衝報表源
在會話變數中緩衝報表源使得報表源可被有效地使用多次。在未緩衝報表源時,多次建立新報表源的過程將變得非常昂貴。而且,緩衝報表源還允許重新整理包含或不包含已儲存資料的報表。
以下樣本顯示了如何在會話變數中緩衝報表源:
String report = "/reports/sample.rpt";
ReportClientDocument reportClientDoc = new ReportClientDocument();
reportClientDoc.open(report, 0);
Object reportSource = reportClientDoc.getReportSource();
session.setAttribute("reportSource", reportSource);
注意: 如果要使用緩衝的報表源,在不再使用報表源之前,請不要調用查看器或報表源的丟棄方法。
強烈建議您緩衝報表源,以便在查看報表時確保資料的一致性。如果使用未緩衝的報表源,則會在查看器或報表控制項中執行任何操作時建立新的報表源。因此,使用未緩衝的報表源將會導致查看器顯示包含已儲存資料的一些頁面,並同時顯示包含即時資料的另一些頁面。
2. 只有查看器的頁面
如果 JSP 頁面只包含查看器而沒有任何其他內容,則可以執行一些操作來簡化報表查看實施。
設定 setOwnPage
取決於查看內容,查看器能夠產生完整的 HTML 頁面,並能設定相應的頁面屬性。將 setOwnPage 設定為 true 使查看器能夠完整地處理周圍的 HTML 內容,從而帶來若干好處。允許查看器處理周圍的 HTML 內容可以減少需要向 JSP 頁面中添加的代碼量,並使查看器能夠自動確定某些設定:
如果 setOwnPage 為 false,則需要手動設定周圍的 HTML 標籤以及 content-type 和 charset 指令。此外,當 setOwnPage 為 false 時,列印和匯出功能將被禁用。
使用 processHttpRequest 方法
當 setOwnPage 設定為 true 時,您必須使用 processHttpRequest 方法(而不是 getHtmlContent 方法)來顯示報表。之所以必須使用 processHttpRequest 方法,原因是使用 getHtmlContent 與將 setOwnPage 設定為 false 時的效果相同,從而沒有了將 setOwnPage 設定為 true 時的任何優點。
3. 使用 setOwnForm 方法
如果 JSP 頁面不包含任何需要回傳的控制項,則應將 setOwnForm 方法設定為 true。這樣做使查看器能夠自動處理檢視狀態資訊。檢視狀態用於在用戶端緩衝有關報表目前狀態的資訊。如果頁面上有其他控制項,您必須確保 setOwnForm 設定為 false,並手動處理檢視狀態資訊。
以下樣本顯示了如何手動設定檢視狀態資訊:
viewer.setOwnForm(false);
viewer.setViewState((String) session.getAttribute("viewState"));
viewer.processHttpRequest(request, response, getServletContext(), pageContext.getOut());
session.setAttribute("viewState", viewer.getViewState());
注意: setOwnForm 必須設定為 true 才能使參數提示發揮作用。
4. 指定正確的字元集
要將字元從 JSP 檔案發送到 網頁瀏覽器,您必須使用正確的編碼。始終為所有 JSP 頁面指定正確的內容類型和字元集。
如果 JSP 頁面將內容返回到標準 HTML 瀏覽器,請確保定義了正確的字元集:
<%@ page contentType="text/html; charset=utf-8" %>
contentType 和 charset 指令讓瀏覽器知道所返回 HTML 頁面的編碼方式。UTF-8 是查看器必需的字元集。
5. CrystalImageCleaner 範例程式碼
為了確保定期刪除查看器使用的臨時檔案,需要使用 CrystalImageCleaner 對象。通過將正確配置的 CrystalImageCleaner 對象添加到使用查看器的 JSP 頁面,可協助提高 Web 應用程式的效能。
注意: 為了確保 CrystalImageCleaner 對象可用,JSP 頁面中必須有以下程式碼。
<%@ page import="com.crystaldecisions.report.web.viewer.CrystalImageCleaner" %>
樣本 1
本樣本方法建立一個 CrystalImageCleaner 對象,該對象每分鐘掃描影像檔一次,但只刪除那些至少已存在 2 分鐘的檔案。由於這些設定的最佳值高度取決於查看器的使用和應用程式的設計特徵,因此,必須正確調整這些設定,以便確保您的應用程式獲得最佳效能。
<%!
public void jspInit(){
CrystalImageCleaner.start(getServletContext(), 60000, 12000);
}
%>
樣本 2
本樣本方法在從服務中刪除 JSP 頁面後即停止 CrystalImageCleaner 對象。
<%!
public void jspDestroy(){
CrystalImageCleaner.stop(getServletContext());
}
%>