gpt4 book ai didi

jsf - fileUpload 不会在带有 JSF 2.2 的 PrimeFaces 3.5 中触发事件

转载 作者:行者123 更新时间:2023-12-04 13:38:54 27 4
gpt4 key购买 nike

我无法在 PrimeFaces 3.5 上制作 fileUpload 组件来触发事件。我已经阅读了许多有关该主题的帖子,并在那里遵循了建议,但仍然无效。我尝试了所有模式(简单、自动、高级),但都没有成功。

如果我使用 JSF 规范中的标准 inputFile 标记,它可以正常工作。

这是我的 web.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">

<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>primefaces.THEME</param-name>
<param-value>redmond</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>

<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>faces/home.xhtml</welcome-file>
</welcome-file-list>
</web-app>

这是我的带有 fileUpload 标签的 View 页面的一部分:
<h:form enctype="multipart/form-data"> 
<p:dialog id="basicDialog" header="Add pictures" widgetVar="dlg1" >
<p:fileUpload fileUploadListener="#{galleryManagedBean.addPicturesToGallery}" multiple="true"/>
</p:dialog>
</h:form>

使用从标记调用的方法从托管 bean 中提取:
@Named(value = "galleryManagedBean")
@RequestScoped
public class GalleryManagedBean {
public void addPicturesToGallery(FileUploadEvent event)
{
System.out.println("Triggered upload");
}
}

另外我想补充一点,在我使用 Chrome 中的调试器工具检查 Http POST 请求后,它会被正确触发。

我在类路径中添加了必要的库,即:
commons-fileupload-1.3.jar
commons-io-2.4.jar

最佳答案

这是由 FacesServlet 中的更改引起的JSF 2.2。从那个版本开始,FacesServlet由于新的 Servlet 3.0 特定 multipart/form-data 的存在, native 支持文件上传(特别是:@MultipartConfig HTTP 请求)注解。还有一个新的 <h:inputFile>引入组件以在标准 JSF 组件集中提供文件上传组件。
这一切都与旧 PrimeFaces 3.x 版本中的 PrimeFaces 文件上传工具冲突,后者根本没有考虑到这个新的 JSF 2.2 特性。 PrimeFaces 3.x 文件上传过滤器解析并消耗了整个请求,而它应该将此工作留给 FacesServlet .这导致了 FacesServlet无法正确解码 HTTP 请求(确定提交的值和操作)。
专为 JSF 2.2 设计的 PrimeFaces 4.0 已将所有这些都考虑在内。在 this changeset在 PrimeFaces 文件上传过滤器中,您可以看到为识别 JSF 2.2 并绕过过滤器中的解析所做的更改。理论上,从web.xml中完全删除文件上传过滤器注册也应该足够了。这样就不再使用了。
如果您升级到 PrimeFaces 4.0,它应该可以正常工作。巧合的是,它在 2 天前才正式发布,所以你很准时。

关于jsf - fileUpload 不会在带有 JSF 2.2 的 PrimeFaces 3.5 中触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19180180/

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