gpt4 book ai didi

ajax - JSF 2.2 - 文件上传不适用于 Ajax。表单似乎具有不正确的编码类型(仅通过 AJAX)

转载 作者:行者123 更新时间:2023-12-04 11:39:58 24 4
gpt4 key购买 nike

尝试实现 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,这应该可以工作,但在我的情况下,它给了我以下错误:

the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is application/x-www-form-urlencoded;charset=UTF-8



尽管我已经正确设置了表单编码,但查看请求,部分请求提交:

Content-type: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 快照时,以下构造对我有用,您可以从 implementation jar 中提到的“What's new in 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"));
}

// ...

我建议尝试使用较新的 Mojarra 版本。显然,旧版 Mojarra 中存在一个错误,无法创建正确的 multipart/form-data使用 <iframe> 请求hack 最终导致了这个错误。 mXX无论如何,版本都是测试版,不应依赖于生产。这个错误理论上也可能是特定于浏览器的,但它目前在 Chrome 26、Firefox 20 和 IE 10 中对我来说很好用。

我看到的唯一问题是隐藏的 <iframe>在 Chrome 和 Firefox 中仍然可见,如下所示:

enter image description here

似乎他们忘记设置 frameborder归因于 0在生成的 <iframe> 中.我已举报 issue 2861关于那个。

关于ajax - JSF 2.2 - 文件上传不适用于 Ajax。表单似乎具有不正确的编码类型(仅通过 AJAX),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16336795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com