File upload 如何使用命令按钮而不是上载按钮上载p:fileUpload的文件

File upload 如何使用命令按钮而不是上载按钮上载p:fileUpload的文件,file-upload,jsf-2,primefaces,commandbutton,File Upload,Jsf 2,Primefaces,Commandbutton,Iam使用JSF2.1和primefaces上传文件。在我的应用程序中,我必须在创建记录时动态添加文件。但是当我使用 我无法编写在保存期间上载文件的代码。我希望仅在单击“保存”时上载文件,而不是在上载期间上载文件。 有谁能帮我实现这个吗 public String handleFileUpload(FileUploadEvent event) throws IOException { FacesMessage msg = new FacesMessage("Succesful", e

Iam使用JSF2.1和primefaces上传文件。在我的应用程序中,我必须在创建记录时动态添加文件。但是当我使用 我无法编写在保存期间上载文件的代码。我希望仅在单击“保存”时上载文件,而不是在上载期间上载文件。 有谁能帮我实现这个吗

public String handleFileUpload(FileUploadEvent event) throws IOException {  
    FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded.");
    FacesContext.getCurrentInstance().addMessage(null, msg);  
    UploadedFile file = event.getFile();

    String prefix = FilenameUtils.getBaseName(file.getFileName());
    String suffix = FilenameUtils.getExtension(file.getFileName());


    String path = "C:/apache-tomcat-7.0.47/webapps/ROOT/WEB-INF/images";

     ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext();


    File fileToDirectory = File.createTempFile(prefix + "-", "." + suffix, new File(path));

    InputStream inputStream = event.getFile().getInputstream();
    String fileName = event.getFile().getFileName();

    OutputStream outputStream = new FileOutputStream(fileToDirectory);

    byte[] buffer = new byte[1024];

    int length;
    //copy the file content in bytes 
    while ((length = inputStream.read(buffer)) > 0){

        outputStream.write(buffer, 0, length);

    }

    inputStream.close();
    outputStream.close();
    return path+fileName;


}
我需要在保存时保存此代码,但我无法在保存过程中获取无法使用的事件。改用新的。然后,您可以将输入值直接绑定到
UploadedFile
属性。这只需要禁用Ajax

例如

另一种选择是迁移到JSF2.2中引入的标准JSF
组件。然后您可以继续使用Ajax

例如

另见:
<h:form enctype="multipart/form-data">
    ...
    <p:fileUpload mode="simple" value="#{bean.file}" />
    ...
    <p:commandButton value="Save" action="#{bean.save}" ajax="false" />
</h:form>
private UploadedFile file; // +getter+setter

public void save() {
    try (InputStream input = file.getInputStream()) {
        // ...
    }
}
<h:form enctype="multipart/form-data">
    ...
    <h:inputFile value="#{bean.file}" />
    ...
    <p:commandButton value="Save" action="#{bean.save}" />
</h:form>
private Part file; // +getter+setter

public void save() {
    try (InputStream input = file.getInputStream()) {
        // ...
    }
}