Sé cómo subir archivos usando Primefaces o usando Tomahawk, sin embargo, intento cargar archivos usando Apache Commons FileUpload y hasta ahora estoy teniendo un poco de camino bloquear. Aunque mi formulario use multipart/form-data
, cuando envío mi formulario, el tipo de contenido se convierte en application/x-www-form-urlencoded
. Aquí está mi códigoCómo obtener JSF para subir archivos con Apache Commons FileUpload
<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>
aquí está mi 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();
}
}
}
Así que cuando intento imprimir el contenido tipo anterior, que mostró application/x-www-form-urlencoded
. Si pongo ajax="false"
a mi p:commandButton
, entonces el método submit()
está ni siquiera invocado, pero si saco enctype="multipart/form-data"
(aún mantienen ajax="false"
), entonces submit()
se invoca pero no se multiparte, es application/x-www-form-urlencoded
, por lo que apache commons fileupload lanzan una excepción ya que no es multiparte Parece que todo lo que hago, parece que no puedo obtener el pedido múltiple. Por favor ayuda
Muchas gracias. Es muy bueno saber toda esta información. –
De nada. – BalusC
@BalusC Hice lo que me dijo para crear un 'Filtro', pero el método de acción no se activa si' h: form' tiene 'enctype =" multipart/form-data "'. Estoy en JSF 1.2. ¿Puedes decirme por qué sucede esto? He hecho la pregunta [aquí] (http://stackoverflow.com/questions/14242293/hcommandbutton-is-not-firing-action-if-the-hform-has-enctype-multipart-form-d) –