So come eseguire il caricamento di file usando Primefaces o usando Tomahawk, tuttavia, sto cercando di caricare file usando Apache Commons FileUpload e fino ad ora ho un po 'di strada bloccare. Anche se il mio modulo utilizza multipart/form-data
, quando invio il mio modulo, il tipo di contenuto diventa application/x-www-form-urlencoded
. Qui è il mio codiceCome caricare JSF 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>
Ecco il mio 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();
}
}
}
Così, quando provo a stampare tipo sopra il contenuto, ha mostrato application/x-www-form-urlencoded
. Se metto ajax="false"
al mio p:commandButton
, allora il metodo submit()
è nemmeno invocato, ma se prendo enctype="multipart/form-data"
(ancora mantenere ajax="false"
), quindi submit()
viene invocato, ma non è più parti, è application/x-www-form-urlencoded
, così comuni apache fileupload generano un'eccezione dal momento che non è multipart. Sembra che qualunque cosa faccia, non riesco a ottenere il requrest in più parti. Per favore aiuto
Grazie mille. È molto bello sapere tutte queste informazioni. –
Prego. – BalusC
@BalusC Ho fatto come hai detto di creare un 'Filtro', ma il metodo di azione non si attiva se' h: form' ha 'enctype =" multipart/form-data "'. Sono in JSF 1.2. Puoi dirmi perché questo sta accadendo? Ho posto la domanda [qui] (http://stackoverflow.com/questions/14242293/hcommandbutton-is-not-firing-action-if-the-hform-has-enctype-multipart-form-d) –