Wicket:AJAXDownload - 下载几个文件

时间:2015-07-14 11:33:02

标签: java ajax file download wicket

我正在使用wicket框架。

我要求向客户端浏览器发送几个单独的文件(zip文件不相关)。

我在我的页面中添加了一个扩展AbstractAjaxBehavior的AJAXDownload类 - 一个向客户端发送文件的解决方案,如下所示:

   download = new AJAXDownload(){
    @Override
    protected IResourceStream getResourceStream(){
       return new FileResourceStream(file){

        @Override
        public void close() throws IOException {
                    super.close();
                    file.delete();
        }
       };
     }};
    add(download);

在我的代码中的其他一点,我尝试使用ajax请求启动向客户端下载多个文件,同时循环遍历文件的arraylist然后每次触发AJAXDownload:

    ArrayList<File> labelList = printLabels();

    for(int i=0; i<labelList.size(); i++){

     file = labelList.get(i);

     //initiate the download
     download.initiate(target);                                                                 

    }

但是,它只向客户端发送这些文件中的一个。我已经检查过,文件肯定是在服务器端创建的。但其中只有一个被发送给客户。

有谁能让我知道我做错了什么?

由于

1 个答案:

答案 0 :(得分:0)

你正在做的一切都是正确的! 我不知道如何解决你的问题,但我会尝试解释发生了什么,以便其他人可以提供帮助:

Ajax响应有几个条目,如: <evaluate>document.location=/some/path/to/a/file</evaluate>

wicket-ajax.js只是遍历评估并执行它们。如果有一个条目,那么一切正常 - 您已下载文件。但是如果还有更多,那么浏览器会在很短的时间内收到多次更改location的请求。显然它只丢掉了其中一个。

一个明显的解决方案是使用回调/承诺 - 当下载完成然后触发下一个。问题是如何从浏览器接收这样的下载完成的通知。或者至少我不知道。

可以根据超时(即setTimeout)推出解决方案,但这很容易出错。

我希望这些信息足以让其他人为您提供解决方案!