p:fileUpload没有在辅助bean中设置上传文件

use*_*539 9 jsf file-upload primefaces jsf-2

我正面临着<p:fileUpload>PrimeFaces 的问题.我创建了一个Facelet页面来上传文件,如下所示:

<h:form id="welcomeForm">
    <p:fileUpload value="#{fileUploadController.uploadedFile}" mode="simple" />
    <h:commandButton value="Submit" action="#{fileUploadController.submit}" />
    <h:message for="welcomeForm" />
</h:form> 
Run Code Online (Sandbox Code Playgroud)

和一个支持bean如下:

public class FileUploadController {   

    private UploadedFile uploadedFile;

    public FileUploadController() {
    }       

    public UploadedFile getUploadedFile() {
        return uploadedFile;
    }

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

    public void submit() {    
        // Get information you from the uploaded file
        System.out.println("Uploaded file name : " + uploadedFile);
    }

} 
Run Code Online (Sandbox Code Playgroud)

当我单击Submit按钮时,submit()会调用该方法,但结果如下:

信息:上传的文件名:null

这是怎么造成的,我该如何解决?

Bal*_*usC 13

请阅读PrimeFaces用户指南<p:fileUpload>章节.

FileUpload入门

首先要做的是配置解析multipart请求的fileupload过滤器.FileUpload过滤器应映射到Faces Servlet.

<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>
Run Code Online (Sandbox Code Playgroud)

简单文件上传

简单文件上载模式在传统模式下工作,文件输入的值应为 UploadedFile实例.

<h:form enctype="multipart/form-data">
    <p:fileUpload value="#{fileBean.file}" mode="simple" />
    <p:commandButton value="Submit" ajax="false"/>
</h:form>
Run Code Online (Sandbox Code Playgroud)
import org.primefaces.model.UploadedFile;

public class FileBean {
    private UploadedFile file;
    //getter-setter
}
Run Code Online (Sandbox Code Playgroud)

请注意enctype="multipart/form-data"表单的属性.这对于HTML是必需的,以便能够将文件发送到服务器.对于JSF,过滤器是必需的,以便从multipart/form-data请求中提取数据.如果没有其中任何一个,则不会调用命令操作,也不会调用所有属性null.


Ben*_*Ben 11

我认为问题在于简单上传不支持ajax.你应该补充ajax="false":

<h:form id="welcomeForm">
    <p:fileUpload value="#{fileUploadController.uploadedFile}" mode="simple" />
    <h:commandButton value="Submit" action="#{fileUploadController.submit}" ajax="false" />
    <h:message for="welcomeForm" />
</h:form> 
Run Code Online (Sandbox Code Playgroud)

或者使用primefaces autouploader.