![](/img/trans.png)
[英]Autofocus Attribute of HTML5 does not work only in FireFox when <Form><input> are loaded via Ajax. WHY?
[英]JSF 2.2 - fileupload does not work with Ajax. Form appears to have incorrect enctype (only via AJAX)
嘗試實現JSF 2.2示例我有以下代碼:
<h:form prependId="false" enctype="multipart/form-data">
<!-- Now it's the AJAX file upload component -->
<h:inputFile id="fileUpload" value="#{someBean.file}" >
<f:ajax />
</h:inputFile>
<h:commandButton value="Upload" />
</h:form>
根據一些JSF 2.2,這應該工作,但在我的情況下它給了我以下錯誤:
請求不包含multipart / form-data或multipart / mixed流,內容類型頭是application / x-www-form-urlencoded; charset = UTF-8
查看請求雖然我已正確設置我的表單enctype,但部分請求提交:
內容類型:application / x-www-form-urlencoded; charset = UTF-8 Faces-Request:partial / ajax
請注意,web.xml也被修改為:
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
<multipart-config>
<location>c:\dotmp</location>
<max-file-size>20848820</max-file-size>
<max-request-size>418018841</max-request-size>
<file-size-threshold>1048576</file-size-threshold>
</multipart-config>
</servlet>
我正在使用Mojarra 2.2.0-m15,但也嘗試使用早期版本。 有誰知道關於這個問題的任何有用的信息,我認為這是一個錯誤?
我不知道發生了什么事,因為我以前沒見過這個。 當使用今天的Mojarra 2.2.1快照時,以下構造對我有用,你可以從JSF 2.2中的新功能中提到的“ 實現jar ”鏈接下載它?
<h:form enctype="multipart/form-data">
<h:inputFile value="#{bean.file}" required="true">
<f:ajax listener="#{bean.handleFileUpload}" render="@form" />
</h:inputFile>
<h:messages />
</h:form>
同
private Part file;
public void handleFileUpload(AjaxBehaviorEvent event) {
System.out.println("file size: " + file.getSize());
System.out.println("file type: " + file.getContentType());
System.out.println("file info: " + file.getHeader("Content-Disposition"));
}
// ...
我建議嘗試更新的Mojarra版本。 顯然,較舊的Mojarra版本中存在一個錯誤,該錯誤無法使用<iframe>
hack創建正確的multipart/form-data
請求,最終導致此錯誤。 mXX
版本無論如何都是beta版本,不應該依賴於生產。 理論上這個錯誤也可能是瀏覽器特定的,但它在Chrome 26,Firefox 20和IE 10中目前適用於我。
我看到的唯一問題是隱藏的<iframe>
在Chrome和Firefox中仍然可見,如下所示:
似乎他們忘記在生成的<iframe>
中將frameborder
屬性設置為0
。 我已經報告了2861號問題 。
我修復了JSF(和其他部分)的JavaScript,以便在servlet標准2上啟用和不使用AJAX的Multipart請求。
JSF 2.2文件上載從servlet版本3開始。此外,名為“IFrame Transport”的負責傳輸層未處於發布狀態。 所以我添加了一個透明的Multipart請求,完成了傳輸層並將所有內容放在一起上傳標簽:
<e:inputFile id="file" value="#{fileUpload.file}" filename="#{fileUpload.filename}"
mimeType="#{fileUpload.mimeType}"/>
標簽與AJAX一起工作,傳統的頁面提交和servlet標准2/3。不是最好的實現,但它的工作幾乎是透明的。 可從http://www.intersult.com/wiki/page/JSF%20Ext#section-JSF+Ext-FileUpload (請使用翻譯)訪問該解決方案。
歡迎評論。
我使用javax.faces-2.2.6.jar與PrimeFaces <p:fileUpload mode="simple"
有同樣的問題。 當我從<h:commandButton
禁用ajax時,問題就消失了。 在我的情況下,刷新整個頁面是可以的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.