Я разрабатываю страницу в 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");
}