Java 在Struts中下载文件并转发到页面

Java 在Struts中下载文件并转发到页面,java,jsp,struts2,Java,Jsp,Struts2,我在使用Struts下载文件时遇到了一个问题。我知道Struts是一项古老的技术,但我的公司正在为客户维护一个古老的应用程序 所以,问题是我们需要一个网页来下载一个文件。方案如下:到达网页>点击按钮>执行处理(DB查询和数据选择)>生成excel文件>下载文件>返回初始页面 我的代码一直工作到文件下载,也就是说,我可以下载正确的excel文件,但我不能返回到原始网页 我在这个论坛上读到了这篇文章和其他文章,似乎下载一个文件和返回原始页面是两种不同的处理方式,Struts只能处理一种 我绝对需要这

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

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

我的代码一直工作到文件下载,也就是说,我可以下载正确的excel文件,但我不能返回到原始网页

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

我绝对需要这两种处理方法,所以我的想法是:当用户单击原始页面上的按钮时,我应该打开另一个窗口(甚至弹出窗口),该窗口将负责excel处理和下载,并且我的原始页面不会移动,因此在处理结束时我不需要前进


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

是的,你的想法一定会奏效。但用户必须在下载开始后关闭弹出窗口

只是想提出一些其他想法: 我曾经遇到过一个类似的问题,但解决起来有点不同。Javascript确实允许用一个按钮在一行中执行多条语句(使用弹出式和重定向解决方案,您无论如何都会这样做)

因此,您可以监听按钮上的click事件,下载文件,然后做一些不同的事情

下面是一些关于使用javascript下载文件而不使用弹出窗口的主题。简单的javascript重定向也很容易

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

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

下载
$('downloadbutton')。在('click',function()上{
下载($('downloadbutton')。数据('downloadlink');
重定向($('downloadbutton')。数据('redirectpage');
});

非常感谢,这确实比使用弹出窗口更优雅。我想看看如何设置它,但我首先关心的是在下载之前发生的excel处理。如果我在启动治疗后立即链接下载,下载不会太快吗?我想我需要轮询治疗并等待它终止,然后再启用下载,对吗?谢谢你的帮助!大概我不知道浏览器是否会等到文件下载开始。但是,您可以在应用程序之外使用类似JSFIDLE的工具轻松地测试这一点。您也可以在一段时间后使用
窗口.setTimeout()
重定向。再次感谢@beendr,您的回答和评论帮助我解决了问题;)作为记录,我确认Javascript不会等待处理结束,因此我在重新加载页面之前使用了
setTimeout(reload,5000)
。另外,我不会重定向到另一个页面,我的目标是刷新当前页面,因此我使用
location.reload(true)
强制服务器重新加载页面。Struts无论如何都不是旧技术。