JSF 2.2 - 文件上传不适用于 Ajax。表单的 enctype 似乎不正确(仅通过 AJAX)

2024-04-05

尝试实现 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(使用前将#替换为@)

JSF 2.2 - 文件上传不适用于 Ajax。表单的 enctype 似乎不正确(仅通过 AJAX) 的相关文章

随机推荐