Мы создали решение, в котором пользователь имеет таблицу с файлами, каждая запись имеет флажок. Он может выбрать столько, сколько захочет, а затем нажать кнопку загрузки.FileDownloader и флажок, скачать выбранные элементы
Мы используем такой ресурс, он должен позволить динамически загружать, в зависимости от выбранных элементов
private StreamResource createResource(final IndexedContainer container) {
return new StreamResource(new StreamSource() {
@Override
public InputStream getStream() {
for (Object o : container.getItemIds()) {
CheckBox checkbox = (CheckBox) container.getItem(o).getItemProperty(C_CHECK_BOX).getValue();
if (checkbox.getValue()) {
selectedFiles.add(o);
}
}
// do some magic to get stream of selected files
}
}, "download.zip");
}
Проблема заключается в том, что только второй и после нажмите на кнопку, дает ожидаемые restults.
Получилось, что FileDownoader получает ресурс с сервера, а затем отправляет текущий статус компонента. Это причина, почему первый клик дает устаревший результат.
У вас есть идеи, как преодолеть это? Можно ли заставить: сначала обновить компонент, а затем загрузить ресурс?
Большое спасибо Pawel
Попробуйте вызвать setImmediate (true); для CheckBoxes при их создании. –