我知道如何使用Primefaces或使用Tomahawk來完成文件上傳,但是,我正在使用Apache Commons FileUpload進行文件上傳,到目前爲止,我還是有點道路塊。即使我的表單使用multipart/form-data
,當我提交表單時,內容類型將變爲application/x-www-form-urlencoded
。這裏是我的代碼如何使用Apache Commons FileUpload獲取JSF上傳文件
<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()
被調用,但它不是多部分,它是application/x-www-form-urlencoded
,所以Apache的百科全書文件上傳拋出一個異常因爲它不是多部分。看起來像我所做的,我似乎不能得到多部分的要求。請幫助
非常感謝。知道所有這些信息是非常好的。 – 2012-02-07 14:44:29
不客氣。 – BalusC 2012-02-07 15:24:29
@BalusC我按照你所說的創建了一個'Filter',但是如果'h:form'具有'enctype =「multipart/form-data」',那麼action方法不會被觸發。我在JSF 1.2中。你能告訴我爲什麼會發生這種情況嗎?我已經問了這個問題[這裏](http://stackoverflow.com/questions/14242293/hcommandbutton-is-not-firing-action-if-the-hform-has-enctype-multipart-form-d) – 2013-01-09 18:00:24