尝试实现 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
流,内容类型标头是
应用程序/x-www-form-urlencoded;charset=UTF-8
尽管我已正确设置表单 enctype,但查看请求后,部分请求仍会提交:
内容类型:application/x-www-form-urlencoded;charset=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>
我使用的是 Mojarra 2.2.0-m15,但也尝试过使用早期版本。有谁知道有关此问题的任何有用信息,我认为这是一个错误?
我不确定发生了什么事,因为我以前没有见过这个。当我使用今天的 Mojarra 2.2.1 快照时,以下构造适用于我,您可以从““ 中提到的链接JSF 2.2 中有哪些新增内容? http://jdevelopment.nl/jsf-22/
<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>
with
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 版本中存在一个错误,无法创建正确的multipart/form-data
请求使用<iframe>
最终导致此错误的 hack。这mXX
无论如何,版本都是测试版本,不应该依赖于生产。从理论上讲,这个错误也可能是特定于浏览器的,但目前在 Chrome 26、Firefox 20 和 IE 10 中对我来说效果很好。
我看到的唯一问题是隐藏的<iframe>
在 Chrome 和 Firefox 中仍然可见,如下所示:
看来他们忘记设置了frameborder
归因于0
在生成的<iframe>
。我已经举报了第2861期 https://java.net/jira/browse/JAVASERVERFACES-2861关于那个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)