Спасибо @Kukeltje за помощь в поиске ответа.
«Простые» виджеты загрузки файлов, такие как HTML5 <input type="file">
, JSF's <h:inputFile>
и Omnifaces <o:inputFile>
, позволяют пользователю выбрать один или несколько файлов, которые будут загружены во время отправки.
Некоторые более сложные виджеты fileUpload, такие как Primefaces один (с mode="advanced"
, режим по умолчанию и multiple="true"
), позволяют пользователю загружать несколько файлов за один клик ДО времени отправки, но если пользователь не делает этого, то выбранные файлыне загружены во время отправки.Виджет PF может использоваться с mode="simple"
, если разработчик хочет избежать проблемы юзабилити, когда пользователь предполагает, что выбранные файлы загружены во время отправки, а это не так.Преимущества использования виджета PF таким способом заключаются в эстетичности и возможности выбора нескольких файлов.
В качестве сноски, не связанной с исходным вопросом, в частности, существует проблема с виджетом PF и, возможно, с другимипохожие в похожих рамках.В простом режиме, если пользователь выбирает несколько файлов, виджет отображает только первый выбранный файл.
Я вижу еще одну проблему, когда после того, как пользователь выбрал несколько файлов в ЛЮБОМ из этих виджетов, которые разрешают использование нескольких, эти файлы не могут быть отменены.После экспериментов с JS для отображения списка выбранных файлов я обнаружил, что в JS не могу изменить список из-за безопасности браузера, см. Ответ BalusC здесь .В итоге я получил простой JS, который при отправке проверяет, есть ли на виджете загрузки PF какие-либо выбранные файлы, и, если это так, предотвращает отправку и просит пользователя загрузить файлы перед отправкой.Я думаю, что это наиболее полезное решение.
<p:commandButton value="Submit" actionListener="#{bean.submit}" onclick="return checkAttachments();" ajax="false" />
<script>
function checkAttachments() {
var attachmentRows = $(".ui-fileupload-row");
console.log("rows " + attachmentRows.length);
if (attachmentRows.length == 0 ) {
return true;
}
PF('uploadAttachmentsWarningDialog').show();
return false;
}
</script>