Jsf p:未调用fileUploadListener

Jsf p:未调用fileUploadListener,jsf,file-upload,jsf-2,primefaces,Jsf,File Upload,Jsf 2,Primefaces,我在用 玻璃鱼4.0 JSF2.2 莫哈拉2.2.0 Primefaces 3.5 我在XHTML页面上有这个fileUpload组件 <h:form enctype="multipart/form-data"> <p:fileUpload id="txtCatImage" value="#{testManagedBean.uploadedFile}" mode="advanced"

我在用

  • 玻璃鱼4.0
  • JSF2.2
  • 莫哈拉2.2.0
  • Primefaces 3.5
我在XHTML页面上有这个
fileUpload
组件

<h:form enctype="multipart/form-data">

    <p:fileUpload id="txtCatImage" 
                  value="#{testManagedBean.uploadedFile}"
                  mode="advanced"
                  sizeLimit="100000"
                  multiple="false"
                  showButtons="true" 
                  allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
                  fileUploadListener="#{testManagedBean.fileUploadListener}"/>

    <p:message for="txtCatImage" showSummary="false"/>

    <p:commandButton id="btnSubmit" 
                     actionListener="#{testManagedBean.insert}" 
                     icon="ui-icon-check" value="Save"/>
</h:form>
前面提到的文件上载侦听器-
fileUploadListener()
从未被调用

文件上载筛选器映射到
web.xml
中,如下所示

<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>

<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>*.jsf</url-pattern>
</servlet-mapping>

PrimeFaces文件上载筛选器
org.primefaces.webapp.filter.FileUploadFilter
PrimeFaces文件上载筛选器
Facesservlet
Facesservlet
javax.faces.webapp.FacesServlet
1.
Facesservlet
*.jsf
我已经在类路径中添加了
apachecommons文件上传
apachecommons io
。在我之前使用Spring/JSF的项目中,同样的情况也适用


我看不出我在这里遗漏了什么。它是否与服务器版本有关?

这很可能是因为Primefaces 4是唯一与Glassfish 4(Java EE 7)中最新JSF标准兼容的版本。Primefaces 3.5与Glassfish 3.1.2.2(Java EE 6)配合使用
有更多的人有这个问题。
9月16日星期一将推出Primefaces 4.0 RC1,因此如果您真的想要GF 4,您应该尝试使用它。

编辑:
参考:

用户可以自行决定RC是否适合他。我刚刚向他建议过,因为这是目前唯一的方法。

如果您使用
Primefaces
上传,您必须注意以下情况

  • 不要使用
    ajax
    请求,这意味着您必须在
    中添加
    ajax=“false”
    属性。否则,请使用
  • 如果要显示动态图像,则支持bean的范围必须是会话范围。否则,您必须将文件写入临时存储器,并使用此文件路径显示动态图像

  • 参考资料是

    “Primefaces 4是唯一一个与Glassfish 4(Java EE 7)中最新JSF标准兼容的版本,”你能对这一事实发表任何引用吗9月16日星期一将发布Primefaces 4.0 RC1“这是一个候选版本,也许迁移到beta版实际上不是OP的选择。”同样,你需要一个参考。你发布的链接是关于JSF 2.2的,而用户说他使用2.0。显然,在这个链接中,我没有看到任何与JavaEE7相关的内容。为什么不能只是玻璃鱼的问题?我的答案是正确的。请在此处再次查看:。ğağatayğivici是爱国阵线的创造者和所有者。检查他的回答。因为GF 4是Java EE 7实现,所以JSF 2.2、Primefaces 3.5与GF 4不兼容。如果您仍然不理解,请查看此页面:。上面写着JavaEE7。你现在满意了吗?对不起,我不小心发布了JPA 2.0版。它是JSF2.2,Mojarra2.2.0,“达到每日投票限制”。我今天不能投票。不过,我明天会做的。谢谢。我已经在类路径中添加了ApacheCommonsFileUpload和ApacheCommonsIO。你到底是怎么做到的?有很多方法可以做到这一点,而其中许多方法对于战争来说显然是错误的。您确认过那些JAR最终出现在构建/部署的WAR文件的
    /WEB-INF/lib
    文件夹中吗?我刚刚签出了它们。部署应用程序后,两个jar文件都出现在
    $Project/projectwar/build/web/web-INF/lib
    OK中。如果您删除/禁用所有与安全相关的筛选器和内容,该怎么办?(只是为了排除它们的原因)如果您尝试JSF2.1呢?(JSF2.2自带了自己的本地文件上传解析器,不知道PrimeFaces 3.5是如何操作的,我自己也从未尝试过)。我尝试过与Mojarra 2.1.6、JSF2.1和PrimeFaces 3.5上运行的GlassFish 3.1.2相同的场景。它正常工作。在GlassFish 4.0上通过禁用安全过滤器和安全约束进行了尝试,但不起作用。1。这是错误的。OP正在使用
    mode=“advanced”
    。ajax只能在
    mode=“simple”
    上禁用。
    <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>
    
    <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>*.jsf</url-pattern>
    </servlet-mapping>