VAADIN: StreamResource с дублированным fileName использует старый StreamResource - PullRequest
0 голосов
/ 12 октября 2018

У меня есть вид, у меня есть две кнопки.Один для создания 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-файлы работает.

1 Ответ

0 голосов
/ 12 октября 2018

Может быть, вместо этого браузер выполняет кеширование?

...