Thanks Ernesto! But I want to have the link invisible on startup (because the file's empty). So I have this: (doesn't work, but has to) exportedFileLink = new DownloadLink("exported_file_link", new LoadableDetachableModel<File>() {
private static final long serialVersionUID = 1L; @Override protected File load() { return exportedFile; } }, PhonebookExporter.OUTPUT_FILE_NAME) { private static final long serialVersionUID = 1L; @Override public boolean isVisible() { return exportedFile != null; } }; final WebMarkupContainer exportedFileLinkHolder = new WebMarkupContainer("link_holder"); exportedFileLinkHolder.setOutputMarkupId(true); exportedFileLinkHolder.add(exportedFileLink); rightForm.add(exportedFileLinkHolder); rightForm.add(new AjaxButton("export_button") { private static final long serialVersionUID = 1L; @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { PhonebookExporter exporter = getExporter(); exportedFile = exporter.export(uploadFolder); if (exportedFile == null) { error(getString("not_exported")); } else { info(getString("exported")); } target.addComponent(exportedFileLinkHolder); target.addComponent(feed); } }); I really start to get pissed off by this one!!! grrrr Regards, Martin -----Original Message----- From: Ernesto Reinaldo Barreiro [mailto:reier...@gmail.com] Sent: Tuesday, March 02, 2010 3:50 PM To: users@wicket.apache.org Subject: Re: DownloadLink problem Weird. Just try this example: import java.io.File; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.markup.html.link.DownloadLink; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.AbstractReadOnlyModel; /** * @author Ernesto Reinaldo Barreiro (reier...@gmail.com) * */ public class TestDownLoadLink extends Panel { private static final long serialVersionUID = 1L; private File test = null; private DownloadLink download; /** * @param id */ public TestDownLoadLink(String id) { super(id); this.download = new DownloadLink("download", new AbstractReadOnlyModel<File>(){ private static final long serialVersionUID = 1L; @Override public File getObject() { return test; } },"TestDownLoadLink.html") { private static final long serialVersionUID = 1L; @Override public boolean isEnabled() { return test != null; } }; download.setOutputMarkupId(true); add(download); AjaxLink<Void> update = new AjaxLink<Void>("update") { private static final long serialVersionUID = 1L; @Override public void onClick(AjaxRequestTarget target) { test = new File(TestDownLoadLink.class.getResource("TestDownLoadLink.html").getFile()); if(target != null) { target.addComponent(TestDownLoadLink.this.download); } } }; add(update); } } and the HTML <html xmlns:wicket="org.apache.wicket"> <head> </head> <body> <wicket:panel> <a wicket:id="download">download</a> <a wicket:id="update">Click me to update download</a> </wicket:panel> </body> </html> Just place them somewhere and do new TestDownLoadLink("xxx"); It works for me. First time the download link is disable and when you click on the AJAX link file is assigned, link is refreshed and you can download your file;-) Best, Ernesto On Tue, Mar 2, 2010 at 2:24 PM, Martin Asenov <mase...@velti.com> wrote: > Unfortunately doesn't work this way... The model is never refreshed... > > -----Original Message----- > From: Ernesto Reinaldo Barreiro [mailto:reier...@gmail.com] > Sent: Tuesday, March 02, 2010 2:31 PM > To: users@wicket.apache.org > Subject: Re: DownloadLink problem > > Not sure... but could you try something like: > > DownloadLink downloadLink = new DownloadLink("link_id", new > AbstractReadOnlyModel<File>(){ > public File getObject() { > return this.linkModel; > }; > },"myfile.xxx"); > downloadLink.setOutputMarkupId(true); > > and make linkModel a member variable? This way file will be "refreshed". > > Best, > > Ernnesto > > On Tue, Mar 2, 2010 at 1:14 PM, Martin Asenov <mase...@velti.com> wrote: > > > Hi, guys! > > > > I experience some DownloadLink problem - I have these fields: > > > > File linkModel; > > DownloadLink theLink = new DownloadLink("link_id", new > > Model<File>(linkModel)); > > theLink.setOutputMarkupId(true); > > > > After another button click I have the linkModel field pointing to real > file > > on the file system. And then I say: > > > > target.addComponent(theLink); > > > > the link name is still invisible, and when I click on the small clickable > > area, Wicket comes up with: > > > > WicketMessage: Method onLinkClicked of interface > > org.apache.wicket.markup.html.link.ILinkListener targeted at component > > [MarkupContainer [Component id = exported_file_link]] threw an exception > > > > Root cause: > > > > java.lang.IllegalStateException: > > org.apache.wicket.markup.html.link.DownloadLink failed to retrieve a File > > object from model > > at > > > org.apache.wicket.markup.html.link.DownloadLink.onClick(DownloadLink.java:141) > > at > org.apache.wicket.markup.html.link.Link.onLinkClicked(Link.java:224) > > at java.lang.reflect.Method.invoke(Method.java:597) > > I thought I've made everything perfect, but it seems that I haven't. > > Any help is appreciated! > > > > Best regards, > > Martin > > > > > > --------------------------------------------------------------------- > 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