我发现了很多类似的东西,但没有一个真正符合我的意愿。
我有一个jsp,一开始是java代码,实际需要10-30秒才能完成(我从数据库中获取内容并构建图表),我想在中间添加一个很好的加载图像页面并在加载完成后使其淡出。
答案 0 :(得分:1)
这不是一个直接的解决方案。但是,它可以使用iframe
来实现您的要求。
我对单页jsp的试验失败,因为在JSP内部的进程完成之前,页面加载没有发生。
以下是我使用的解决方法:
- 创建处理显示部分的主JSP(假设为index.jsp)页面
醇>
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Testing the loading</title>
<script type="text/javascript">
function processRecords(){
document.getElementById("mainContent").src = "process.jsp";
}
</script>
</head>
<body onload="processRecords()">
<iframe id="mainContent" width="100%" style="border: none" seamless src="loader.jsp"></iframe>
</body>
</html>
- 使用加载程序显示部件
创建JSP / HTML(假设为loader.jsp) 醇>
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<title>Processing</title>
</head>
<body>
<img src="images/loader.gif" style="position:absolute; top:0; bottom:0; left:0; right:0; margin:auto;"/>
</body>
</html>
- 使用实际处理&amp;创建JSP(假设process.jsp)。结果显示
醇>
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<title>Processing</title>
</head>
<body>
<%
//Following is a manual sleep simulating a process
try {
//Sleep for 10 seconds
Thread.sleep(10000);
} catch (InterruptedException ex) {
out.write("Error occurred while processing");
}
out.write("Done!");
%>
</body>
</html>
- 工作
醇>
当主JSP页面(index.jsp)加载时,它将加载iframe
src指向加载器JSP页面(loader.jsp)。因此,最初将显示加载程序gif图像。主JSP页面中的onload
方法调用javascript,javascript又调用实际的处理JSP页面(process.jsp)。直到处理JSP页面返回结果,iframe
中的加载器页面将不会被替换模拟,从而在Java代码中处理之前模拟加载。