h: атрибут формы enctype = "multipart / form-data" не отображается после обратной отправки - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть форма с компонентом выгрузки файлов:

<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

...