Fileupload fileUploadListener 仅在每秒按下一次按钮时调用

Fileupload fileUploadListener only invoked every second button press

我正在尝试使用 primefaces 5.2 中的 fileupload 组件上传文件,但我发现 fileUploadListener 绑定的函数并不是每次都被调用。当我第一次按下上传按钮时调用它,但它不会在第二次调用。当我第三次按下上传按钮时会调用它,但它不会在第四次时调用。下面是我的代码和设置。

Web.xml

<context-param>
    <param-name>primefaces.UPLOADER</param-name>
    <param-value>auto</param-value>
</context-param><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>

XHtml

<composite:implementation>
        <p:fieldset legend="#{cc.attrs.tittle}" id="transfile" styleClass="fieldset" style="width:60%">
        <h:form enctype="multipart/form-data">
            <p:fileUpload fileUploadListener="#{transferFRorzwBean.translate}"
                dragDropSupport="false" mode="advanced" sizeLimit="100000"
                allowTypes="/(\.|\/)(txt|csv)$/" immediate="true"
                label="Open" uploadLabel="Translate"/>
        </h:form>
        </p:fieldset>
</composite:implementation>

Java代码

@ManagedBean
@ViewScoped
public class TransferFRorzwBean implements Serializable {
    private static final long serialVersionUID = 1L;
    private UploadedFile file;

public void translate(FileUploadEvent event) {
    this.file = event.getFile();
    String filename = FilenameUtils.getName(file.getFileName());
    uploadFileName = filename;
    InputStream input = file.getInputstream();
    String path = FacesContext.getCurrentInstance()
            .getExternalContext().getRealPath("/Protected/upload");
    OutputStream output = new FileOutputStream(new File(path, filename));

    try {
        IOUtils.copy(input, output);
    } finally {
        IOUtils.closeQuietly(input);
        IOUtils.closeQuietly(output);
    }
}
public UploadedFile getFile() {
    return file;
}

public void setFile(UploadedFile file) {
    this.file = file;
}

IDE : Eclipse Kepler 服务版本 1 服务器:Tomcat 8.0 罐子:commons-fileupload-1.3.1.jar、commons-io-2.4.jar、primefaces-5.2.jar 我也尝试在 web.xml 下方添加,但不起作用...

<filter-mapping>
   <filter-name>PrimeFaces FileUpload Filter</filter-name>
   <servlet-name>Faces Servlet</servlet-name>
   <dispatcher>FORWARD</dispatcher>
</filter-mapping>

有人对这个问题有想法吗?

我通过在 java 中添加如下代码解决了我的问题:

event.getComponent().setTransient(false);