在回答其他问题时,有人指出 SourceForge 的下载页面是通过添加隐藏的
当前版本的下载页面是如何实现的?我想构建类似的东西,因为我认为 SF 的解决方案非常优雅。
好吧,更准确地说……确实,最初的“问题”太模糊了。
如果你去http://sourceforge.net/projects/beankeeper/files/beankeeper/2.6.2/beankeeper-2.6.2.tar.gz/download http://sourceforge.net/projects/beankeeper/files/beankeeper/2.6.2/beankeeper-2.6.2.tar.gz/download有一个简单的旧 HTML 链接可以下载相关文件,但也有自动下载。延迟好像有2s左右。
有人询问我的特定用例。我会回答这个问题,因为我知道它可能会在一定程度上偏离OP。非常简化:
- 或多或少具有两个 Servlet 的传统 Java EE 应用程序
- 充当 UI 控制器入口点的调度程序 Servlet
- 将 PDF 流式传输到浏览器的“文档 Servlet”,它使用 content-disposition=attachment 来实现,即浏览器显示“保存或打开”对话框
- 带有多个输入字段和一个提交按钮的打印输出页面
- when the submit button is clicked
- 输入字段值应该在 UI 模型(以及必要时的会话)中更新 -> 这就是调度程序 Servlet 所做的
- 必须触发 PDF 的创建 -> 这就是文档 Servlet 的作用
如果我采用 SF 的模型,表单提交将触发调度程序 Servlet 并重新加载当前页面(常规行为)。重新加载页面后,我会以某种方式 - 对,SF 是如何做到这一点的? - 使浏览器调用文档Servlet。
只需在页面加载期间更改窗口位置即可。
这是一个SSCCE http://sscce.org,只需复制、粘贴并运行即可。
<!doctype html>
<html lang="en">
<head>
<title>SO question 2222034</title>
<script>
window.onload = function() {
setTimeout(function() {
window.location = 'http://download.java.net/maven/1/jstl/jars/jstl-1.2.jar';
}, 2000); // It's "cool" to let user wait 2 more seconds :/
}
</script>
</head>
<body>
<p>The download of jstl-1.2.jar will start shortly...</p>
</body>
</html>
或者如果您需要使用 POST,只需提交一个隐藏表单:
<!doctype html>
<html lang="en">
<head>
<title>SO question 2222034</title>
<script>
window.onload = function() {
setTimeout(function() {
document.getElementById('downloadform').submit()
}, 2000); // It's "cool" to let user wait 2 more seconds :/
}
</script>
</head>
<body>
<p>The download of jstl-1.2.jar will start shortly...</p>
<form id="downloadform" action="http://download.java.net/maven/1/jstl/jars/jstl-1.2.jar"></form>
</body>
</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)