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:[email protected]]
Sent: Tuesday, March 02, 2010 3:50 PM
To: [email protected]
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 ([email protected])
*
*/
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 <[email protected]> wrote:
> Unfortunately doesn't work this way... The model is never refreshed...
>
> -----Original Message-----
> From: Ernesto Reinaldo Barreiro [mailto:[email protected]]
> Sent: Tuesday, March 02, 2010 2:31 PM
> To: [email protected]
> 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 <[email protected]> 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: [email protected]
> For additional commands, e-mail: [email protected]
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]