Hello,

I want to download an excelfile, which will be created on the fly by clicking 
on a button. So I have created my own downloadButton. The excel-file will be 
created, it works fine but the download do not work. I have started my 
application in development mode, but no exception will be thrown. But in the 
wicket ajax panel I found this message: ERROR: Wicket.Ajax.Call.failure: Error 
while parsing response: Could not find root <ajax-response> element

Here is the code of my button:

public class CustomDownloadButton extends AjaxFallbackButton {
    private static final Logger log = 
LoggerFactory.getLogger(CustomDownloadButton.class);
    private CSSFeedbackPanel feedback;
    private String filename;

    public CustomDownloadButton(String id, Form<?> form, CSSFeedbackPanel 
feedback, String filename) {
        super(id, form);
        this.feedback = feedback;
        this.filename = filename;
    }

    @Override
    public void onSubmit(AjaxRequestTarget target, Form form) {
        target.add(feedback);
        SlaReportModel slaReportModel = (SlaReportModel)form.getModelObject();
        if(!slaReportModel.isEmpty()){
            
download(createFileForDownload(slaReportModel.getTxtDatumVon(),slaReportModel.getTxtDatumBis()));
        }else{
            error("Sie müssen den Zeitraum angeben!");
        }

    }

    private File createFileForDownload(Date beginDate, Date endDate) {
        log.debug("Creating file for download!");
        File tempFile = null;
        try
        {
            tempFile = File.createTempFile("SLA", ".xls");

            InputStream data = new 
ByteArrayInputStream(ConsoleDataHandlerImpl.getInstance().getReportAsByteStream(beginDate,endDate));
            Files.writeTo(tempFile, data);

        } catch (Exception e) {
            log.debug(e.getStackTrace().toString());
        }
        log.debug("File " + tempFile.getName() + " was successfully created!");
        return tempFile;
    }

    private void download(final File fileForDownload) {
        log.debug("Preparing download file " + fileForDownload.getName());
        System.out.println(fileForDownload.toString());
        if (fileForDownload == null){
            throw new IllegalStateException(getClass().getName() + " there is 
no file, file is null!");
        }

        IResourceStream resourceStream = new FileResourceStream(new 
org.apache.wicket.util.file.File(fileForDownload));
        getRequestCycle().scheduleRequestHandlerAfterCurrent(new 
ResourceStreamRequestHandler(resourceStream) {
            @Override
            public void respond(IRequestCycle requestCycle) {

                super.respond(requestCycle);
                //Files.remove(fileForDownload);

            }
        }.setFileName(this.filename));
                //.setContentDisposition(ContentDisposition.ATTACHMENT)
                //.setCacheDuration(org.apache.wicket.util.time.Duration.NONE));
    }

    @Override
    protected void onError(AjaxRequestTarget target, Form<?> form)
    {
        // repaint the feedback panel so errors are shown
        target.add(feedback);
    }
}


Mit freundlichen Grüßen
Christoph Manig



Reply via email to