Как использовать DownloadLink Wicket с файлом, созданным на лету?

DownloadLink хорош и удобен для создания кнопки / ссылки для загрузки файла в следующих строках:

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

и


Однако я хотел бы ] запускает создание файла для загрузки только при нажатии кнопки / ссылки . Другими словами, при нажатии я вызываю метод, который генерирует файл (в нашем случае отчет Pentaho), помещает его в временное место и возвращает файл , указывающий на него. Затем я бы сказал DownloadLink использовать этот файл . Вопрос в том, это возможно каким-то образом ?

В настоящее время у нас есть что-то вроде приведенного ниже кода, который работает, но меня интересует, можно ли вместо него использовать DownloadLink .

add(new Link("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"));
  }
});

(Wicket 1.4.18, если он имеет значение.)

18
задан approxiblue 16 November 2015 в 04:44
поделиться