困扰了我一星期,是关于struts2<result name="success" type="stream"> 用ajax方式调用下载的
具体情况是这样的,
1.首先读数据库,生成文件在服务器。
2.再用<result name="success" type="stream">做了一个下载功能,下载生成在服务器的文件。已经解决中英文文件名的问题的了。单独调用是正常的
由于生成文件的时候比较长,我想增加用户体验,在查的长时间过程中,在页面弹出一个全屏屏蔽层,层中间再显示个loading的gif。这样的话,前台页面就要知道后台程序时候完成生成文件这个操作了,方便关闭前台显示的loading屏蔽层了。
我有2个思路
1.用ajax方法,ajax有个回调函数,我就知道什么时候关闭loading。但问题是ajax调用<result name="success" type="stream">进行下载的话,下载窗口此终不出来。
2.让strtus2完成后给前台返回一个标志或状态,但下面这2个action并没有返回页面的地方啊。
这个是生成文件的action
<action name="ConvertXML" class="com.struts.action.ConvertXMLAction">
<!-- action间跳转并能提交参数S -->
<result name="success" type="redirectAction">
<param name="actionName">download</param>
<param name="namespace">/</param>
<param name="fileName">${fileName}</param>
</result>
<!-- action间跳转并能提交参数E -->
</action>
这个是下载的action
<action name="download" class="com.struts.action.DownloadAction">
<result name="success" type="stream">
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="inputName">inputStream</param
</result>
</action>
[解决办法]
沙发 不熟 盼高手指教 同学习
[解决办法]
用户点击要求生成文件时,在Session里放一个标志位,文件生成完毕后,在返回前,把Session里的标志位去掉
页面在用户点击后显示你的那个带动画的框,然后Ajax轮询后台
后台单独写一个Action专门给下载用的,在这个Action的处理方法里,查看Session里的标志位
如果标志位存在,说明文件还在生成,就告诉前台,前台就继续等着
否则认为文件生成完毕,马上就要给用户下载了,把你的那个带动画的框隐藏就OK了
问题是,你知道你做的东西大致的负载程度吗?如果负载大的话,就别玩这么多花活了
[解决办法]