这里要动一动手脚.打破以往Struts2的流程
以往Struts2的流程控制方法都是返回String
前台http请求ACTION的xxxx就可以调用上面的方法,方法返回一个String组合的JSON对象供EXT解释.
但是下载文件是以二进制流的形式把文件传回到前面,但EXT读到二进制内容解释不了.这是其一
其二,Struts文件下载要在方法中调用ServletOutputStream的write方法后再调用flush方法.如果把这些内容加到Action的xxxx方法里,
程序运行后就不走不到Action.SUCCESS了,我也不知其原因.
我的方法是用一个public void xxxx()方法代替以往的public String xxxx()方法
Action中的代码:
JS中的代码:
如果要实现进度条等待的话,可以用一个FormPanel提交来实现
这里用了一代动态构建的FormPanel,里面包含了请求下载的条件(一个id).提交这个FORM就可以实现不开新页面下载文件的效果.
代码中当FORM提交后,让一个MessageBox弹出来不停滚动进度条.同时对当前窗口的window对象动了手脚--加了一个onblur事件.
它的作用就是在浏览器弹出下载提示后隐藏MessageBox的页面遮挡