【问题标题】:Downloading a file and forwarding to a page in Struts下载文件并转发到 Struts 中的页面
【发布时间】:2018-01-08 10:09:05
【问题描述】:

我在使用 Struts 下载文件时遇到问题。我知道 Struts 是一项旧技术,但我的公司正在为客户维护一个旧应用程序。

所以,问题是我们想要一个网页来下载文件。方案如下:到达网页>点击按钮>执行处理(数据库查询和数据选择)>生成excel文件>下载文件>返回初始页面。

我的代码在文件下载之前一直有效,即我可以下载正确的 excel 文件,但无法返回原始网页。

我在这个论坛上看到了这个answer和其他人,似乎下载文件和返回原始页面是两种不同的处理方式,而Struts只能处理一种......

我绝对需要这两种处理,所以我的想法如下:当用户点击原始页面上的按钮时,我应该打开另一个窗口(甚至是弹出窗口)来处理 excel 处理和下载,我的原始页面不会移动,因此我不需要在处理结束时转发。

问题是,你认为这可行吗?我在这里找不到类似的代码,所以我想这不是一个好主意,所以如果您对我的需求有好的实践,请分享:)

【问题讨论】:

  • Struts 无论如何不是旧技术。

标签: java jsp struts2


【解决方案1】:

是的,你的想法肯定行得通。但是用户必须在下载开始后关闭弹出窗口。

只是提供一些其他的想法: 我曾经遇到过类似的问题并解决了一些不同的问题。 Javascript 确实允许使用一个按钮在一行中执行多个语句(无论如何您都可以使用弹出和重定向解决方案执行此操作)。

所以你可以监听按钮上的点击事件并下载文件,然后做一些不同的事情。

这里有一些关于在不使用弹出窗口的情况下使用 javascript Link 下载文件的主题。而且一个简单的javascript重定向也很容易Link #2

struts 的粘合代码是您在用户访问您的页面时生成的两个链接。

html/jquery 中或多或少的伪代码:

<button id="download" data-downloadlink="<s:property value='downloadlink'/>" data-redirectpage="<s:property value='redirectpage'/>">Download</button>
$('#downloadbutton').on('click', function() {
    download($('#downloadbutton').data('downloadlink'));
    redirect($('#downloadbutton').data('redirectpage'));
});

【讨论】:

  • 非常感谢,这确实比使用弹窗更优雅。我将看看如何设置它,但我首先关心的是下载之前发生的 excel 处理。如果我在启动治疗后立即链接下载,下载会不会太快?我想我需要在启用下载之前轮询处理并等待它终止,对吗?感谢您的帮助!
  • 也许吧。我不知道浏览器是否会等到文件下载开始。但是您可以使用 jsfiddle 之类的东西在您的应用程序之外轻松地进行测试。您也可以在一段时间后使用window.setTimeout() 重定向。
  • 再次感谢@beendr,您的回答和评论帮助我解决了我的问题;)作为记录,我确认Javascript不会等待治疗结束,因此我在重新加载之前使用了setTimeout(reload, 5000)这页纸。另外,我不会重定向到另一个页面,我的目的是刷新当前页面,因此我使用location.reload(true) 强制服务器重新加载页面。
猜你喜欢
  • 2014-10-05
  • 1970-01-01
  • 1970-01-01
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多