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>