Vaadin — использование FileDownloader без кнопки

#java #download #vaadin #vaadin7

#java #Скачать #vaadin #vaadin7

Вопрос:

Я хочу использовать FileDownloader Vaadin без расширения кнопки. Конечным результатом должно быть то, что пользователь нажимает на запись таблицы, и это должно затем инициировать загрузку.

С FileDownloader это работает нормально, но, похоже, вам нужно расширить кнопку, чтобы заставить это работать. Вот код на данный момент, если это поможет:

         table.addItemClickListener(new ItemClickListener()    {
        public void itemClick(ItemClickEvent event) {
            Map<String, Object> dok = dbService.getDokument(event.getItem().getItemProperty("Id").getValue().toString());

            myResource = createResource(dok);
            fileDownloader = new FileDownloader(myResource);
            //HERE I WANT TO TRIGGER THE DOWNLOAD
        } 
    });

private StreamResource createResource(Map<String, Object> dok) {
    return new StreamResource(new StreamSource() {
        @Override
        public InputStream getStream() {
            byte[] file = (byte[]) dok.get("DATA");

            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            bos.write(file, 0, file.length);
            return new ByteArrayInputStream(bos.toByteArray());

        }
    }, getValue(dok.get("DOK_NAME")));
}
  

Комментарии:

1. Разве вы не можете добавить кнопку в макет, но установить ее скрытой?

2. Запуск самой загрузки не проблема, проблема в том, что при каждом нажатии на таблицу кнопка получает новое расширение, поэтому при каждом нажатии добавляется еще один файл для загрузки. Мне нужно сделать это без расширения кнопки.

3. Я так понимаю, что это не вариант использовать fileDownloader.setFileDownloadResource(resource) метод, чтобы избежать добавления нового расширения?

4. Вы могли бы создать кнопку, которую вы не делаете видимой, а затем вызвать метод button.click() в методе ItemClick().