jsp下如何调用水晶报表
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 页面中添加的代码量,并使查看器能够自动确定某些设置:
它允许查看器根据用于查看页面的设备来选择使用哪些页面开始和结束标记。
例如,对于 Web 浏览器,查看器会写出 <html> 开始标记,而对于移动设备,则会写出 <wml> 开始标记。
注意: Java Reporting Component 不支持生成用于在移动设备上显示的报表。
它能够正确地为页面设置内容类型和字符集信息。这确保了包含国际字符的页面能正确显示。
它能够自动在查看器中启用导出和打印按钮支持。
如果 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 文件发送到 Web 浏览器,您必须使用正确的编码。始终为所有 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());
}
%>