Мы разрабатываем приложение Vaadin, запуская его на oc4j 10.1.3. Есть окно, в котором результаты запроса можно экспортировать в виде файла csv. После создания CSV-файла в качестве vaadin FileResource открытие файла завершается ошибкой. Вот фрагмент:
File file = exporter.exportToFile();
final FileResource resource = new FileResource(file, getApplication());
resource.setCacheTime(0);
resource.getStream().setParameter("Content-Disposition", "attachment;filename=\""+file.getName()+"\"");
event.getButton().getWindow().open(resource);
На данный момент uri ресурса: app://APP/1/xy.csv
У нас есть фильтр для перенаправления пути "/" на "/VAADIN". Когда этот фильтр вызывается, uri файла равен /VAADIN/APP/1/xy.csv
вместо /APP/1/xy.csv
, поэтому я удаляю ненужную часть /VAADIN и вызываю requestdispatcher.forward
с новым uri. Но вот самое интересное, приложение все равно не работает, в логе пишет:
Aug 13, 2012 1:55:58 PM com.vaadin.terminal.gwt.server.AbstractApplicationServlet serveStaticResourcesInVAADIN
INFO: Requested resource [VAADIN/APP/1/xy.csv] not found from filesystem or through class loader. Add widgetset and/or theme JAR to your classpath or add files to WebContent/VAADIN folder.
Итак, uri снова неверен. Он появляется в адресной строке, и приложение сбрасывается на главную страницу. Однако, когда этот uri все еще находится в адресной строке, когда я пытаюсь снова создать файл csv, выполняя любой из других запросов в приложении, часть экспорта возвращает файл, ранее сгенерированный. Если я попытаюсь снова выполнить другой запрос (с предыдущим URL-адресом, все еще находящимся в адресной строке браузера), он, похоже, сгенерирует новый файл csv, но снова вернет первый файл.
Это ошибка vaadin или какая-то магия oc4j? :)