So I have to add the AjaxDownload to my form which add my DownloadButton? Like
this:
AJAXDownload download = new AJAXDownload()
{
@Override
protected IResourceStream getResourceStream()
{
return createResourceStream(item.getModelObject());
}
};
Form<SlaReportModel> reportForm = new Form<SlaReportModel>("reportForm",new
CompoundPropertyModel<SlaReportModel>(new SlaReportModel()));
reportForm.add(download);
reportForm.add(new CustomDownloadButton("submit", reportForm, feedback,
"SLA_Report"));
Mit freundlichen Grüßen
Christoph Manig
-----Ursprüngliche Nachricht-----
Von: Ernesto Reinaldo Barreiro [mailto:[email protected]]
Gesendet: Donnerstag, 10. April 2014 11:53
An: [email protected]
Betreff: Re: Download excel-file
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
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]