У меня есть форма с компонентом выгрузки файлов:
<h:form id="form" enctype="multipart/form-data">
...
<h:inputFile id="file" value="#{importController.file}" label="File:"></h:inputFile>
...
</h:form>
и вспомогательный компонент Viewscoped со свойством Part
@Named
@ViewScoped
public class ImportController implements Serializable {
...
private Part file;
// getters and setters omitted
}
Если пользователь сначала правильно заполняет все в форме, попробуйте затемлогика работает отлично.Но если после проверки POST возникает ошибка проверки (т. Е. Отсутствует какое-либо текстовое поле), поэтому страница снова отображается с опубликованными данными и сообщениями проверки, форма отображается без атрибута enctype="multipart/form-data"
.Это вызывает проблемы, если пользователь исправляет значения, снова выбирает файл для загрузки и отправляет форму.Затем генерируется исключение «Не составной запрос».
Я пытался заменить нативный jsf h: inputFile простыми словами p: fileUpload, но поведение аналогичное.В случае простых выражений исключение не генерируется, но свойство UploadedFile в компоненте-бэк не внедряется вообще из-за отсутствующего энктипа в отображаемой форме.
Я исправил это с помощью javavscript, который заставляет энктип после загрузки страницы,но это не правильный путь.Так это правильное поведение или ошибка или я упускаю что-то фундаментальное?
Есть некоторые части формы, которые загружаются динамически с использованием ajax, но это не относится к компоненту inputFile.Тем не менее, отсутствующий enctype не вызван вызовом ajax, но он пропадает сразу после POST, когда страница перерисовывается, и после этого ajax не вызывается.
Wildfly 12.0.0.Final, Mojarra 2.3.3.SP1, Primefaces 6.2