By the way, i changed it a bit and now i repaint the link instead of repainting the label, so the label isn't needed.
private final DocumentResourceListener documentResourceListener; private final MyPdfResource pdf; .......................... final AjaxFallbackLink link = new AjaxFallbackLink(componentId) { private static final long serialVersionUID = 8947164550163497764L; @Override public void onClick(final AjaxRequestTarget target) { if (target != null) { target.addComponent(this); } final BillItem item = (BillItem) model.getObject(); try { pdf.setAttachmentname(item.getBillNumber() + ".pdf"); pdf.setContent(PdfHelper.generatePdf(item)); final String url = BillDataviewPanel.this.documentResourceListener.getURL().toString(); target.appendJavascript("window.location.href='" + url + "';"); } catch (final Exception e) { Logger.error(e); } } }; .......................... this.documentResourceListener = new DocumentResourceListener("listener", this.pdf); this.add(this.documentResourceListener); And i changed MyPdfResource tob e more flexible; public class MyPdfResource extends DynamicWebResource { private byte[] content = null; private String attachmentname = null; public String getAttachmentname() { return this.attachmentname; } @Override protected ResourceState getResourceState() { return new ResourceState() { @Override public String getContentType() { return "application/pdf"; } @Override public byte[] getData() { try { return MyPdfResource.this.content; } catch (final Exception e) { return null; } } }; } public void setAttachmentname(final String name) { this.attachmentname = name; } public void setContent(final byte[] content) { this.content = content; } @Override protected void setHeaders(final WebResponse response) { super.setHeaders(response); response.setAttachmentHeader(this.attachmentname); } } Mit freundlichen Grüßen Christian Giambalvo -- Fachinformatiker für Anwendungsentwicklung EXCELSIS Informationssysteme GmbH Wilhelmsplatz 8 - 70182 Stuttgart Mobile +49 176 196 32 406 Office +49 711 6 20 30 406 christian.giamba...@excelsisnet.com www.excelsisnet.com www.twitter.com/excelsis_info Sitz Stuttgart Amtsgericht Stuttgart, HRB 21104 Geschäftsführer: Christian Sauter, Dr. Nils Herda, Frank Wolf -----Ursprüngliche Nachricht----- Von: Ernesto Reinaldo Barreiro [mailto:reier...@gmail.com] Gesendet: Dienstag, 6. Oktober 2009 13:18 An: users@wicket.apache.org Betreff: Re: Send file to client via Ajax Done! http://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow <http://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow> Ernesto On Tue, Oct 6, 2009 at 12:15 PM, Giambalvo, Christian < christian.giamba...@excelsisnet.com> wrote: > Yes, please add it. > > Mit freundlichen Grüßen > Christian Giambalvo > -- > Fachinformatiker für Anwendungsentwicklung > > EXCELSIS Informationssysteme GmbH > Wilhelmsplatz 8 - 70182 Stuttgart > Mobile +49 176 196 32 406 > Office +49 711 6 20 30 406 > christian.giamba...@excelsisnet.com > www.excelsisnet.com > www.twitter.com/excelsis_info > > Sitz Stuttgart > Amtsgericht Stuttgart, HRB 21104 > Geschäftsführer: Christian Sauter, Dr. Nils Herda, Frank Wolf > > > -----Ursprüngliche Nachricht----- > Von: Ernesto Reinaldo Barreiro [mailto:reier...@gmail.com] > Gesendet: Dienstag, 6. Oktober 2009 11:48 > An: users@wicket.apache.org > Betreff: Re: Send file to client via Ajax > > Nice to hear it was of some help! I have learned a bit too while doing > it:-) > Cheers, > > Ernesto > > P.S. Shall I add this to a Wiki page?... when I find the time;-) > > On Tue, Oct 6, 2009 at 11:39 AM, Giambalvo, Christian < > christian.giamba...@excelsisnet.com> wrote: > > > Works like a charm. > > I think i've learned something about resource download via ajax. > > Thanks for hat. > > > > > > Mit freundlichen Grüßen > > Christian Giambalvo > > -- > > Fachinformatiker für Anwendungsentwicklung > > > > EXCELSIS Informationssysteme GmbH > > Wilhelmsplatz 8 - 70182 Stuttgart > > Mobile +49 176 196 32 406 > > Office +49 711 6 20 30 406 > > christian.giamba...@excelsisnet.com > > www.excelsisnet.com > > www.twitter.com/excelsis_info > > > > Sitz Stuttgart > > Amtsgericht Stuttgart, HRB 21104 > > Geschäftsführer: Christian Sauter, Dr. Nils Herda, Frank Wolf > > > > -----Ursprüngliche Nachricht----- > > Von: Ernesto Reinaldo Barreiro [mailto:reier...@gmail.com] > > Gesendet: Dienstag, 6. Oktober 2009 11:31 > > An: users@wicket.apache.org > > Betreff: Re: Send file to client via Ajax > > > > Just sent it on my last e-mail! Here it is again! > > import org.apache.wicket.IResourceListener; > > import org.apache.wicket.markup.html.WebMarkupContainer; > > > > /** > > * @author Ernesto Reinaldo Barreiro (reier...@gmail.com) > > * > > */ > > public class DocumentResourceListener extends WebMarkupContainer > implements > > IResourceListener > > { > > private static final long serialVersionUID = 1L; > > private IResourceListener resourceListener; > > > > /** > > * Constructor receiving an IResourceListener.. > > * > > * @param id > > * @param resourceListener > > */ > > public DocumentResourceListener(final String id, IResourceListener > > resourceListener) > > { > > super(id); > > this.resourceListener = resourceListener; > > } > > > > /** > > * Gets the url to use for this link. > > * > > * @return The URL that this link links to > > */ > > protected CharSequence getURL() > > { > > return urlFor(IResourceListener.INTERFACE); > > } > > > > > > @Override > > protected boolean getStatelessHint() > > { > > return false; > > } > > public void onResourceRequested() { > > this.resourceListener.onResourceRequested(); > > } > > } > > > > This is just a trick to have component that generates file contents on > the > > same page! I think you could used mounted resources as well, or just a > > dedicated servlet if you want to get file generation out of wicket! > > > > Best, > > > > Ernesto > > > > On Tue, Oct 6, 2009 at 11:24 AM, Giambalvo, Christian < > > christian.giamba...@excelsisnet.com> wrote: > > > > > Yes it would be usefull. > > > But where does DocumentResourceListener came from? > > > I'm using wicket 1.3.6 and DocumentResourceListener is not available. > > > > > > Thanks > > > > > > Mit freundlichen Grüßen > > > Christian Giambalvo > > > -- > > > Fachinformatiker für Anwendungsentwicklung > > > > > > EXCELSIS Informationssysteme GmbH > > > Wilhelmsplatz 8 - 70182 Stuttgart > > > Mobile +49 176 196 32 406 > > > Office +49 711 6 20 30 406 > > > christian.giamba...@excelsisnet.com > > > www.excelsisnet.com > > > > > > Sitz Stuttgart > > > Amtsgericht Stuttgart, HRB 21104 > > > Geschäftsführer: Christian Sauter, Dr. Nils Herda, Frank Wolf > > > > > > > > > -----Ursprüngliche Nachricht----- > > > Von: Ernesto Reinaldo Barreiro [mailto:reier...@gmail.com] > > > Gesendet: Dienstag, 6. Oktober 2009 09:54 > > > An: users@wicket.apache.org > > > Betreff: Re: Send file to client via Ajax > > > > > > Hi Cristian, > > > I've got it working! > > > > > > Just place all the following files at the same package and you will get > a > > > working example (I tested them with FF35 and IE7). > > > > > > import org.apache.wicket.ajax.AjaxRequestTarget; > > > import org.apache.wicket.ajax.markup.html.AjaxLink; > > > import org.apache.wicket.markup.html.WebPage; > > > import org.apache.wicket.markup.html.basic.Label; > > > import org.apache.wicket.model.AbstractReadOnlyModel; > > > > > > /** > > > * @author Ernesto Reinaldo Barreiro (reier...@gmail.com) > > > * > > > */ > > > public class TestPage extends WebPage{ > > > > > > private Label text; > > > private String labelText = "Hi!"; > > > private DocumentResourceListener documentResourceListener; > > > > > > /** > > > * > > > */ > > > public TestPage() { > > > AjaxLink<Void> link = new AjaxLink<Void>("link") { > > > private static final long serialVersionUID = 1L; > > > > > > @Override > > > public void onClick(AjaxRequestTarget target) { > > > TestPage.this.labelText = "Hi! and donwload image!"; > > > if(target!= null) { > > > target.addComponent(TestPage.this.text); > > > String url = documentResourceListener.getURL().toString(); > > > > target.appendJavascript(";alert('Hi');window.location.href='"+url+"';"); > > > } > > > } > > > }; > > > add(link); > > > text = new Label("text", new AbstractReadOnlyModel<String>() { > > > private static final long serialVersionUID = 1L; > > > > > > @Override > > > public String getObject() { > > > return TestPage.this.labelText; > > > } > > > }); > > > text.setOutputMarkupId(true); > > > add(text); > > > documentResourceListener = new DocumentResourceListener("listener", > new > > > MyPdfResource()); > > > add(documentResourceListener); > > > } > > > > > > } > > > > > > --------------------------- > > > > > > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" > > > "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> > > > <html xmlns:wicket="org.apache.wicket"> > > > <head> > > > </head> > > > <body> > > > <a wicket:id="link">Click Me</a> > > > <span wicket:id="text"></span> > > > <div wicket:id="listener"></div> > > > </body> > > > </html> > > > > > > --------------------------------- > > > > > > import java.io.ByteArrayOutputStream; > > > import java.io.IOException; > > > import java.io.InputStream; > > > import java.io.OutputStream; > > > > > > import org.apache.wicket.markup.html.DynamicWebResource; > > > import org.apache.wicket.protocol.http.WebResponse; > > > > > > /** > > > * @author Ernesto Reinaldo Barreiro (reier...@gmail.com) > > > * > > > */ > > > public class MyPdfResource extends DynamicWebResource { > > > > > > private static final long serialVersionUID = 1L; > > > > > > static int BUFFER_SIZE = 10*1024; > > > /** > > > * > > > */ > > > public MyPdfResource() { > > > } > > > > > > /* (non-Javadoc) > > > * @see > > org.apache.wicket.markup.html.DynamicWebResource#getResourceState() > > > */ > > > @Override > > > protected ResourceState getResourceState() { > > > return new ResourceState() { > > > @Override > > > public String getContentType() { > > > return "application/pdf"; > > > } > > > @Override > > > public byte[] getData() { > > > try { > > > return > > bytes(MyPdfResource.class.getResourceAsStream("jta-1_1-spec.pdf")); > > > } catch (Exception e) { > > > return null; > > > } > > > } > > > }; > > > } > > > public static byte[] bytes(InputStream is) throws IOException { > > > ByteArrayOutputStream out = new ByteArrayOutputStream(); > > > copy(is, out); > > > return out.toByteArray(); > > > } > > > @Override > > > protected void setHeaders(WebResponse response) { > > > super.setHeaders(response); > > > response.setAttachmentHeader("jta-1_1-spec.pdf"); > > > } > > > public static void copy(InputStream is, OutputStream os) throws > > > IOException > > > { > > > byte[] buf = new byte[BUFFER_SIZE]; > > > while (true) { > > > int tam = is.read(buf); > > > if (tam == -1) { > > > return; > > > } > > > os.write(buf, 0, tam); > > > } > > > } > > > } > > > > > > Just replace "jta-1_1-spec.pdf" with your own PDF file on MyPdfResource > > and > > > the exampel should work. An important bit here if > > > > > > @Override > > > protected void setHeaders(WebResponse response) { > > > .... > > > response.setAttachmentHeader("jta-1_1-spec.pdf"); > > > } > > > > > > which makes the file to treated as an attachment instead of replacing > the > > > current page. > > > > > > Best, > > > > > > Ernesto > > > > > > P.S. Would it useful to add this to Wicket's wiki? > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > > > For additional commands, e-mail: users-h...@wicket.apache.org > > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > > For additional commands, e-mail: users-h...@wicket.apache.org > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > For additional commands, e-mail: users-h...@wicket.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org