试图执行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这应该工作,但我的情况下,它是给我下面的错误:
该请求不包含多部分/格式数据或者多部分/混合流,内容类型报头是application / X WWW的窗体-urlencoded;字符集= UTF-8
展望请求,虽然我已经把我的表单的enctype正确,部分要求提交:
内容类型:应用/ X WWW的窗体-urlencoded;字符集= UTF-8面 - 请求:部分/ 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>
我使用的钻嘴鱼科2.2.0-M15,但试图与早期的版本。 有谁知道这个问题,我认为是一个错误的任何有用的信息?
我不知道这是怎么回事,因为我以前没有见过这个。 用今天的钻嘴鱼科2.2.1快照,你可以从“下载时,下面的结构对我的作品实现JAR中提到的”链接是什么在JSF 2.2的新功能?
<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"));
}
// ...
我建议给新钻嘴鱼科版一试。 显然有在较旧版本钻嘴鱼科它未能建立一个适当的错误multipart/form-data
使用请求中的<iframe>
劈这最终导致该错误。 该mXX
版本是beta版本无论如何,不应在生产的依据。 这个错误在理论上也已经特定浏览器,但它目前工作正常,我在Chrome 26,Firefox的20和IE 10。
其中我看到的唯一问题是,隐藏<iframe>
仍然在Chrome和Firefox如下可见:
似乎他们忘记设置frameborder
属性0
在生成<iframe>
我报的问题2861有关。
我固定JSF(和其他部件)的JavaScript使能使用和不使用AJAX上的servlet标准2多部分请求。
在JSF 2.2文件上传的作品与Servlet版本3.此外称为“IFrame的交通运输”负责传输层开始是不是在释放状态。 所以我增加了一个透明的多部分要求,完成了传输层,并把所有一起上传标签:
<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 (请用翻译)。
评论欢迎。
我与PrimeFaces同样的问题<p:fileUpload mode="simple"
使用javax.faces-2.2.6.jar。 当我从我的禁用AJAX问题消失<h:commandButton
在我的情况下,它是确定的刷新整个页面。
文章来源: JSF 2.2 - fileupload does not work with Ajax. Form appears to have incorrect enctype (only via AJAX)