You cannot stream a PDF back to client via AJAX. Have a look at.

https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow


On Thu, Apr 10, 2014 at 11:47 AM, <[email protected]> wrote:

> 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
>
>
>
>


-- 
Regards - Ernesto Reinaldo Barreiro

Reply via email to