Я пытаюсь расширить Vaadin 8 FileDownloader, чтобы ресурс мог генерироваться после того, как FileDownloader был расширен до кнопки.Но я получаю это исключение: java.lang.RuntimeException: ResourceReference не поддерживает ресурсы типа DynamicFileDownloader
Вот мой код:
import com.vaadin.server.DownloadStream;
import com.vaadin.server.FileDownloader;
import com.vaadin.server.Resource;
import com.vaadin.server.StreamResource;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinResponse;
import com.vaadin.server.VaadinSession;
import java.io.IOException;
public class DynamicFileDownloader extends FileDownloader
{
private DynamicDownloadListener dynamicDownloadListener;
public DynamicFileDownloader()
{
super(new Resource()
{
@Override
public String getMIMEType()
{
return "pdf";
}
});
}
public void addDynamicDownloadListener(DynamicDownloadListener listener)
{
dynamicDownloadListener = listener;
}
public void setResource(StreamResource resource)
{
super.setResource("stream", resource);
}
@Override
public boolean handleConnectorRequest(VaadinRequest request,
VaadinResponse response, String path) throws IOException
{
VaadinSession session = getSession();
session.lock();
dynamicDownloadListener.beforeDownload();
DownloadStream stream;
try
{
Resource resource = super.getResource("stream");
stream = ((StreamResource) resource).getStream();
} finally
{
session.unlock();
}
stream.writeResponse(request, response);
return true;
}
public interface DynamicDownloadListener
{
public void beforeDownload();
}
}
Как использовать:
DynamicFileDownloader dynamicFileDownloader = new DynamicFileDownloader();
dynamicFileDownloader.addDynamicDownloadListener(() -> {
try
{
// make resource from user input
dynamicFileDownloader.setResource(resource);
} catch (ValidationException | IOException e1)
{
}
});
dynamicFileDownloader.extend(window.getButtonDownload());
Я гуглил, но ничего не смог найти Обычный FileDownloader не позволяет динамический контент из пользовательского ввода, поэтому я пытаюсь расширить FileDownloader.