1. 怎麼在jsp頁面上點擊列印,直接列印出頁面上的報表
jsp頁面的表格數據可以另存為excel表格的。
JSP從資料庫導出數據到Excel下載的實現
關鍵代碼:
<%@ page contentType="application/msexcel" %>
<%
//response.setHeader("Content-disposition","inline; filename=videos.xls");
response.setHeader("Content-disposition","attachment; filename=test.xls");
//以上這行設定傳送到前端瀏覽器時的檔名為test.xls
//就是靠這一行,讓前端瀏覽器以為接收到一個excel檔
%>
<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="GBK"%>
<%@ page contentType="application/msexcel" %>
<%
//response.setHeader("Content-disposition","inline; filename=videos.xls");
response.setHeader("Content-disposition","attachment; filename=test.xls");
//以上這行設定傳送到前端瀏覽器時的檔名為test.xls
//就是靠這一行,讓前端瀏覽器以為接收到一個excel檔
%>
<%@ page import="org.springframework.web.context.WebApplicationContext"%>
<%@ page import="com.test.*"%>
<%@ page import="org.springframework.web.context.support.WebApplicationContextUtils"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
UserManager um = (UserManager) ctx.getBean("userManager");
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>spring jdbc test</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<br>
<table border="1" width="100%">
<tr> <td>id</td> <td>name</td>
</tr>
<%
List<User> users2=um.getUserList();
for(int i=0;i<users2.size();i++)
{
int t_id2=users2.get(i).getId();
String t_name2=users2.get(i).getName();
%>
<tr>
<td><%=t_id2 %></td> <td><%=t_name2 %></td>
</tr>
<%
}
%>
</table>
</body>
</html>
2. jsp如何獲得html form中的數據
HTML:
<form action="a.jsp">
<input type="text" name="test_data"/>
<input type="submit" value="提交" />
</form>
a.jsp:
<%
String testData = request.getParameter("test_data"); // 即可獲得test_data的值。
%>
頁面間鏈接和數據傳遞的三種方式
(1)通過版JSP表單形式將數據提交到下一權個頁面;
(2)通過JSP表單鏈接將數據提交到下一個頁面;
(3)通過JSP表單會話將數據提交到後續頁面,會話是一次會話只要瀏覽器不關閉就不會關閉會話,一般默認保存30分鍾可以根據自己的需要更改。
3. 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());
}
%>
4. jsp怎麼和finereport的cpt報表的使用並傳達參數
載入finereport.js使用cjkEncode
cjkEncode方法在FineReport的JS庫中已經預先提供了,用戶可以在自己的網頁中引入FineReport的JS庫,就可以使用FR.cjkEncode對中日韓文字元進行編碼,如下對調用報表的url進行cjkEncode:
<html>
<head>
<title>FineReport Demo</title>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<script type="text/javascript" src="/WebReport/ReportServer?op=emb&resource=finereport.js"></script>
<script language="javascript">
function autoLoad(){
var addr = FR.cjkEncode("/WebReport/ReportServer?reportlet=/doc/Primary/Parameter/Parameter.cpt&地區=華東");
document.getElementById("reportFrame").src = addr;
}
window.onload = autoLoad;
</script>
</head>
<body>
<iframe id="reportFrame" width="900" height="400" ></iframe>
</body>
</html>
直接調用cjkEncode
載入finereport.js再引用cjkEncode,一方面可能會引起js沖突,另一方面也載入了很多不必要的方法。
若用戶只需要使用該方法,可以將cjkEncode實現的代碼復制到網頁中或者用戶自己的js文件中,然後再引用cjkEncode。
<html>
<head>
<title>FineReport Demo</title>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<script type="text/javascript">
//cjkEncode方法的實現代碼,放在網頁head中或者用戶自己的js文件中
function cjkEncode(text) {
if (text == null) {
return "";
}
var newText = "";
for (var i = 0; i < text.length; i++) {
var code = text.charCodeAt (i);
if (code >= 128 || code == 91 || code == 93) { //91 is "[", 93 is "]".
newText += "[" + code.toString(16) + "]";
} else {
newText += text.charAt(i);
}
}
return newText;
}
function autoLoad() {
var addr = cjkEncode("/WebReport/ReportServer?reportlet=/doc/Primary/Parameter/Parameter.cpt&地區=華東");
document.getElementById("reportFrame").src = addr;
}
window.onload = autoLoad; //載入網頁時調用autoLoad方法
</script>
</head>
<body>
<iframe id="reportFrame" width="900" height="400" ></iframe>
</body>
</html>