Primefaces 5 FileUploadEvent, загружаются не все файлы

Я разрабатываю страницу в Primefaces 5 и использую тег p:fileUpload в расширенном режиме для загрузки нескольких файлов.

У меня загрузка файлов работает нормально, но во время тестирования я заметил, что иногда не все файлы загружались на самом деле. Пример: я загружаю 6 файлов, а на самом деле загружаются только 4 файла.

Когда я просматривал журнал трассировки, я также заметил, что метод запускался только 4 раза (предыдущий пример), что заставило меня поверить, что было выполнено только 4 запроса ajax из ожидаемых 6.

На странице

<h:form enctype="multipart/form-data">
     <p:fileUpload   fileUploadListener="#{fileUploaderBean.uploadFile}"
                     mode="advanced"
                     dragDropSupport="true"
                     multiple="true"
                     update="filesId"
                     sizeLimit="100000"
                     ajax="true"/>
<p:outputPanel id="filesId">
     <p:dataTable    value="#{fileUploaderBean.uploadedFiles}" 
                     var="uploadedFile" 
                     id="filesTable" 
                     action="#{fileUploaderBean.testAjax}">
           <p:column headerText="Uploaded File/s">
                 <h:outputText value="#{uploadedFile}" />
           </p:column>
     </p:dataTable>
</p:outputPanel>

Бин

private List<UploadedFile> filesList = Collections.synchronizedList(new ArrayList<UploadedFile>());
private List<String> uploadedFiles = Collections.synchronizedList(new ArrayList<String>());

public void uploadFile (FileUploadEvent fileUploadEvent) throws IOException 
{
    LOGGER.info("Running uploadFile fileUploadEvent={}", fileUploadEvent);

    saveFileToStagingFolder(fileUploadEvent.getFile().getFileName(), fileUploadEvent.getFile().getInputstream());
    uploadedFiles.add(fileUploadEvent.getFile().getFileName());

    LOGGER.info("uploadFile process complete");
}

person TurboNerd    schedule 14.08.2014    source источник
comment
Это действительно странно. Что происходит в консоли браузера js (на вкладке сети) во время 5-го и 6-го запросов? Также удалите ограничение sizeLimit, чтобы убедиться, что оно не работает неправильно.   -  person kolossus    schedule 15.08.2014


Ответы (1)


Добавьте это в web.xml

<filter>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>

У меня было только это в моем web.xml, я забыл добавить сам фильтр

<filter-mapping>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <servlet-name>faces</servlet-name>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

Похоже, что FileUploader будет работать без него, но совсем не очень хорошо. Можно подумать, что подобная ошибка конфигурации зарегистрирует что-то, чтобы указать, в чем проблема.

person TurboNerd    schedule 14.08.2014