У меня есть вид, у меня есть две кнопки.Один для создания PDF-файла, а другой для предварительного просмотра сгенерированного PDF-файла.
Метод создания файла возвращает ByteArrayOutputStream
, который я затем сохраняю как byte[]
в качестве поля представления.
Метод предварительного просмотра сгенерированного файла затем принимает это byte[]
и показывает его так:
private void viewPDF() {
final ByteArrayInputStream data = new ByteArrayInputStream(this.cancellationByteArray);
final Window window = new Window();
window.setHeight("95%");
window.setWidth("95%");
final StreamSource source = () -> data;
final String fileName = "Cancellation";
final StreamResource resource = new StreamResource(source, fileName);
resource.setMIMEType("application/pdf");
final BrowserFrame browserFrame = new BrowserFrame(null, resource);
browserFrame.setWidth("100%");
browserFrame.setHeight("100%");
window.setContent(browserFrame);
window.center();
UI.getCurrent().addWindow(window);
}
При этом я заметил нечто странное.Когда я генерировал PDF и просматривал его, все было хорошо.Однако, когда я перезапускал приложение, генерировал новое и снова просматривал его, я всегда сначала видел старый файл PDF, который я сгенерировал первым.Повторное нажатие на кнопку предварительного просмотра покажет ту, которую я только что сгенерировал.Если затем я снова создаю новый PDF и нажимаю кнопку «Просмотр», он снова показывает правильный.Таким образом, с этого момента приложение в основном работает, как и ожидалось.
Теперь я обнаружил, что выполнение параметра fileName
в динамике StreamResource
устраняет эту ошибку.Например, если я сгенерирую имя, например:
final String fileName = "Cancellation-" + this.DATE_FORMAT.format(new Date());
, тогда всегда будет отображаться самая новая версия.
Так почему же так работает?Кеширует ли браузер StreamResource
, и при повторном нажатии кнопки выглядит, если у него уже есть StreamResource
с таким же fileName
?Однако это, по моему мнению, не объясняет, почему мой обходной путь циклически перебирать старые PDF-файлы работает.