点击按钮开始下载

时间:2019-10-30 10:39:04

标签: java ajax file wicket

可以使用

下载文件
AjaxLink<Void> downloadButton = new AjaxLink<Void>("downloadButton") { 

        @Override
        public void onClick(AjaxRequestTarget ajaxRequestTarget) {
}

?还是只能通过onSubmit()操作来实现?因为我有一个通过单击按钮下载文件的工作代码,但是该方法使用了onSubmit。现在,我尝试使用这种按钮执行相同的操作,它以相同的方式准备文件,甚至在我的本地文件中创建一个临时文件,但是当涉及到浏览器中的弹出窗口时,它什么都不做。可能是什么问题呢?

编辑:

这是有效的代码,但是,如果我在AjaxLink中使用相同的代码,它将无法如前所述正常工作:

 @Override
        protected void onSubmit() {
            super.onSubmit();

                        File file = null;

                        try {
                            file = File.createTempFile("temp-file-name", ".csv");
                            String data = getData();
                            if (data == null) {
                                FileUtils.writeByteArrayToFile(file, ("").getBytes());
                            } else {
                                FileUtils.writeByteArrayToFile(file, data.getBytes());
                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        if (file == null) {
                            throw new IllegalStateException(getClass().getName() +
                                    " failed to retrieve a File object from model");
                        }

                        final File preparedFile = file;


                        IResourceStream resourceStream = new FileResourceStream(
                                new org.apache.wicket.util.file.File(file));
                        getRequestCycle().scheduleRequestHandlerAfterCurrent(
                                new ResourceStreamRequestHandler(resourceStream) {
                                    @Override
                                    public void respond(IRequestCycle requestCycle) {
                                        super.respond(requestCycle);
                                        Files.remove(preparedFile);
                                    }
                                }.setFileName("Report.csv")
                                        .setContentDisposition(ContentDisposition.ATTACHMENT));
                    } 
            }
        }