首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >P:没有调用fileUploadListener

P:没有调用fileUploadListener
EN

Stack Overflow用户
提问于 2013-09-15 20:15:28
回答 2查看 7.9K关注 0票数 0

我在用,

  • GlassFish 4.0
  • JSF 2.2
  • Mojarra 2.2.0
  • 素数3.5

我在XHTML页面上有这个fileUpload组件。

代码语言:javascript
复制
<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>

这是对应的托管bean。

代码语言:javascript
复制
@ManagedBean
@ViewScoped
public final class TestManagedBean implements Serializable {

    private UploadedFile uploadedFile;
    private static final long serialVersionUID = 1L;

    public TestManagedBean() {}

    public UploadedFile getUploadedFile() {
        return uploadedFile;
    }

    public void setUploadedFile(UploadedFile uploadedFile) {
        this.uploadedFile = uploadedFile;
    }

    public void fileUploadListener(FileUploadEvent event) {
        uploadedFile = event.getFile();
        System.out.println("fileUploadListener invoked.");
    }

    public void insert() {
        if (uploadedFile != null) {
            System.out.println(uploadedFile.getFileName());
        } else {
            System.out.println("The file object is null.");
        }
    }
}

前面提到的文件上传监听器- fileUploadListener()从未被调用过。

文件上载筛选器在web.xml中映射如下。

代码语言:javascript
复制
<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>

我在类路径中添加了Apache-commons-fileuploadApache-commons-io。在我使用Spring / JSF的早期项目中,同样的情况也是如此。

我看不出我在这里错过了什么。它必须对服务器的版本做些什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-15 20:29:05

这很可能是因为Primefaces 4是与Glassfish 4 (Java 7)中最新的JSF标准兼容的唯一一个。PrimeFaces3.5适用于玻璃鱼3.1.2.2 (Java 6)

有更多的人有这个问题。

9月16日星期一将推出PrimeFaces4.0 RC1,所以如果你真的想要GF 4,你应该试一试。

编辑:

参考资料:Glassfish 4, JSF 2.2 and PrimeFaces FileUploadEvent not working together

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

票数 3
EN

Stack Overflow用户

发布于 2013-09-20 04:22:57

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

  1. 不要使用ajax请求,这意味着您必须在<p:commandButton...>.Otherwise中放置ajax="false"属性,使用<h:commandButton>
  2. 如果要显示动态图像,则支持bean的作用域必须是Session Scope。否则,您必须在临时存储中写入文件,并使用此文件路径显示动态映像。

参考是here

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18817044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档