#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().