Как заставить JSF загружать файл с помощью Apache Commons FileUpload

Я знаю, как сделать загрузку файлов с помощью 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. Похоже, что что бы я ни делал, я не могу получить многосторонний запрос. Пожалуйста, помогите

5
задан skaffman 18 May 2012 в 15:48
поделиться