Я знаю, как сделать загрузку файлов с помощью Primefaces или Tomahawk, однако, я пытаюсь сделать загрузку файлов с помощью Apache Commons FileUpload и пока что у меня возникают трудности. Хотя моя форма использует multipart/form-data
, когда я отправляю форму, тип содержимого становится application/x-www-form-urlencoded
. Вот мой код
<h:body>
<h:form enctype="multipart/form-data">
Upload File
<input type="file" name="file"/>
<p:commandButton value="Submit" action="#{viewBean.submit}"/>
</h:form>
</h:body>
Вот мой ViewBean
@ManagedBean
@ViewScoped
public class ViewBean implements Serializable {
public void submit() {
String url = "/FileUploadServlet";
FacesContext context = FacesContext.getCurrentInstance();
try {
String contentType = context.getExternalContext().getRequestContentType();
context.getExternalContext().dispatch(url);
} catch (Exception e) {
logger.log(Level.SEVERE, "Exception when calling Servlet", e);
} finally {
context.responseComplete();
}
}
}
Итак, когда я пытаюсь вывести тип содержимого выше, он показывает application/x-www-form-urlencoded
. Если я помещу ajax="false"
в мой p: commandButton
, то метод submit()
даже не вызывается, но если я уберу enctype="multipart/form-data"
(сохранив ajax="false"
), затем вызывается submit()
, но это не multipart, это application/x-www-form-urlencoded
, поэтому apache commons fileupload выбрасывает исключение, так как это не multipart. Похоже, что что бы я ни делал, я не могу получить многосторонний запрос. Пожалуйста, помогите