fileUpload 在使用 JSF 2.2 的 PrimeFaces 3.5 中不会触发事件

2024-02-19

我无法在 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 标签:

<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 

这是由以下变化引起的FacesServletJSF 2.2 的。从那个版本开始,FacesServlet原生支持文件上传(具体来说:multipart/form-dataHTTP 请求)得益于新的 Servlet 3.0 特定的存在@MultipartConfig注解。另外,还有一个新的<h:inputFile>引入组件是为了在标准 JSF 组件集中提供文件上传组件。

这一切都与旧版 PrimeFaces 3.x 版本中的 PrimeFaces 文件上传功能相冲突,后者根本没有考虑到这个新的 JSF 2.2 功能。 PrimeFaces 3.x 文件上传过滤器解析并消耗了整个请求,而它应该将此工作留给FacesServlet。这导致了FacesServlet无法正确解码 HTTP 请求(确定提交的值和操作)。

PrimeFaces 4.0 是专门为 JSF 2.2 设计的,已经考虑到了这一切。在在 PrimeFaces 文件上传过滤器中,您可以看到为识别 JSF 2.2 并绕过过滤器中的解析所做的更改。理论上,完全删除文件上传过滤器注册也应该足够了web.xml这样就不再使用它了。

如果您升级到 PrimeFaces 4.0,它应该可以正常工作。巧合的是,它刚刚在两天前正式发布,所以你来得正是时候。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

fileUpload 在使用 JSF 2.2 的 PrimeFaces 3.5 中不会触发事件 的相关文章

随机推荐

  • Mercurial - 如何从分叉的父级获取最新更改?

    我接触 Mercurial 已经有一段时间了 现在我已经在 BitBucket 上建立了几个项目 一个是另一个项目的分叉 我已经能够毫无问题地对每个存储库进行更改 但我不明白的一件事是如何使分支与父存储库的更改保持同步 在我分叉了一个存储库
  • Mockito:想要但没有被调用

    我有以下测试方法 MyClass myClass Mockito mock MyClass class Mockito when myClass methodUsedInMethodBeingTested Matchers any MyTy
  • Python pandas:将字符串拆分为多列并从拆分参数中提取列的数据

    我对 Python 和 Pandas 很陌生 在一列中有一些 URL 路径 我想将其分成单独的列 字符串的每个参数都用分号分隔 我知道关于如何通过分隔符将数据拆分为多个列还有许多其他答案 但是在我的示例中 我想动态创建列并从参数本身提取要放
  • 一次为多个结构实现一个特征[重复]

    这个问题在这里已经有答案了 我有特质FooTrait它有很多功能 我也有结构FooStruct and BarStruct并想要实施FooTrait对于两个结构体 其方法完全相同 有没有办法实现FooTrait对彼此而言FooStruct
  • 我可以将我自己的 Python 类与 numpy 或其他矩阵库一起使用吗?

    我希望能够使用 Python 类作为元素进行矩阵运算 在本例中 是一个简单的伽罗瓦域 http en wikipedia org wiki Galois field执行 它实现了必要的 add mul sub etc 起初 我认为这应该可以
  • Javascript:iFrame 中的事件

    我正在建造一个WYISWYG编辑器与iframe with designMode on 问题是我无法在 Firefox 和 Opera 中的 iframe 上使用任何事件 IE 未经测试 例如我想跟踪 onkeyup 事件 document
  • 如何在 python 中使用带有可选字符的正则表达式?

    假设我有一个字符串 3434 35353 和另一个字符串 3593 如何创建一个能够匹配两者的正则表达式 而无需在另一个失败时将模式设置为其他内容 我知道 d 将匹配3593 但它对3434 35353 but d d 只会匹配带小数的那个
  • 无法在 GCP AI Platform 笔记本上安装 Jupyterlab 扩展

    我在安装 Jupyterlab 扩展时开始遇到以前从未遇到过的问题 安装 Jupyterlab 的新扩展后 我无法构建 我正在使用 GCP AI Platform Notebooks 运行 Jupyterlab 我在 Debian 10 上
  • socket.gaierror: [Errno -2] 名称或服务未知

    我是套接字编程的新手 以下程序是一个从服务器请求文件的客户端程序 但我收到如下所示的错误 我的输入是 GET index html 代码是 谁能帮我解决这个错误 usr bin env python import httplib impor
  • R 可以将表情符号字符转换为对应的文本吗?

    在我昨天的提问中 R 可以读取 html 编码的表情符号字符吗 https stackoverflow com questions 48142634 can r read html encoded emoji characters user
  • jQuery - 使用 .val() 函数检测值变化

    我们都知道使用val 不会触发change事件 所以我们也使用 trigger change 在 后面val 但问题是有人写了val 没有与trigger 这是一个外部文件 我无法编辑它 那么 如何通过如下代码检测值变化 elem on c
  • 多房间预订的数据库设计:一对多

    主要实体 客户 客人 预订 房间分配 我想实现一个多房间预订数据库设计 首先我想先解释一下这个概念 The Client是获得预订的人 The Client一次只能有 1 个预订 The Client可以预订多个房间 The Guest是被
  • 确定最后一个文件块

    我正在尝试为大文件设置通过休息上传的文件 下面的函数负责分块 但我需要能够识别最后一个块 因为我的其余调用更改为 finishUpload 以便提交保存 现在我只能弄清楚 blob 何时为空 但我无法弄清楚如何确定 blob 为空之前的最后
  • python del 与 pandas drop

    我知道这可能是老争论了 但出于pandas drop and python del哪个函数在大数据集上的性能更好 我正在使用机器学习学习python 3并且不确定该使用哪一个 我的数据在pandas数据帧格式 但python del函数在b
  • 无法与Android自定义对话框交互

    好吧 请耐心听我说 因为我还没有那么多地使用自定义对话框 或者根本没有 Android 编程 而且我确信我犯了一个愚蠢的初学者错误 因此 我有一个简单的掷骰子应用程序 我试图将其合并到我现有的应用程序中 但我想将其本质上作为弹出窗口 到目前
  • 动态添加到horizo​​ntalscrollview

    我遵循了一些在线教程 向您展示如何使用多个 xml 文件创建静态水平滚动视图 然而 我希望能够从数据库中获取内容 用内容填充一个新视图 来自库存 xml 布局 然后将其添加到水平滚动视图中 是否有任何教程向您展示如何将动态视图添加到水平滚动
  • Three.js 将对象附加到骨骼

    有什么方法可以将网格连接到骨骼上吗 例如 我加载动画 js 角色 并且想将武器附加到它的手上 可以对 Bone 和 Object3D 原型进行一些简单的修改 由于骨骼继承自 Object3D 因此它们可能有子级 因此我们可以轻松地将网格添加
  • 是否可以通过编程方式运行 Simulink 模型并测量其状态?

    我希望为现有 Simulink 模型设置一个测试集 理想情况下 我可以完全控制模型 明确地步进并测量模型中任何总线上任何信号的状态 正如可能已经收集到的 这是该模型的单元测试系统的前身 因此 我不能真正证明更改模型以适应测试是合理的 测试必
  • 放大镜显示 UIWindow 后面

    我们有一个带有汉堡菜单导航的应用程序 菜单本身是一个位于键窗口后面的窗口 当用户长按一个uitextfield并调出放大镜时 放大镜会显示后面UIWindow的内容 有没有人有任何想法 Video https youtu be CvlLaF
  • fileUpload 在使用 JSF 2.2 的 PrimeFaces 3.5 中不会触发事件

    我无法在 PrimeFaces 3 5 上使用 fileUpload 组件来触发该事件 我读过很多关于该主题的帖子并遵循了那里的建议 但仍然不起作用 我尝试了所有模式 简单 自动 高级 但没有成功 如果我使用 JSF 规范中的标准 inpu