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

Reply via email to