Comment utiliser le Guichet du DownloadLink avec un fichier généré à la volée?

DownloadLink est agréable et pratique pour la création d'un bouton/lien de téléchargement d'un fichier, le long de ces lignes:

add(new DownloadLink("downloadButton", getReportFile(), "report.pdf"));

et

<input type="button" wicket:id="downloadButton" value="Download" />

Cependant, je tiens à déclencher la génération du fichier à télécharger uniquement lorsque le bouton/lien est cliqué. En d'autres termes, au moment de cliquer, je voudrais appeler une méthode qui génère le fichier (un Pentaho report dans notre cas), il met dans une temp place et retourne un File pointant vers elle. Alors je dirais le DownloadLink à utiliser que File. La Question est, est-ce possible en quelque sorte?

Actuellement, nous avons quelque chose comme le code ci-dessous, qui fonctionne, mais je suis intéressé de savoir si DownloadLink pourrait être utilisé à la place.

add(new Link<Void>("downloadButton") {
  @Override
  public void onClick() {
    IResourceStream resourceStream = new AbstractResourceStreamWriter() {
      @Override 
      public void write(OutputStream output) {
        try {
          reportService.generateReport(output, report);
        } catch (IOException e) {
          //...
        }
      }

      @Override
      public String getContentType() {                        
        return CONTENT_TYPE_PDF;
      }
    };

    getRequestCycle()
      .setRequestTarget(new ResourceStreamRequestTarget(resourceStream)
      .setFileName("report.pdf"));
  }
});

(Guichet 1.4.18, si cela fait une différence.)

InformationsquelleAutor Jonik | 2011-10-04