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

Reply via email to