Primefaces commandButton 不会在 Bean 上执行操作



我正在使用SpringBoot 2.7.5和Primefaces 12.0.0

我在将文件上传到服务器时遇到了一些问题,因为如果我放入enctype="multipart/form-data",然后单击按钮,则根本不会调用在action属性上指定的函数

.xhtml

<!DOCTYPE html>
<ui:composition template="./template.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<ui:define name="component">
<h:form id="form" enctype="multipart/form-data">
<p:fileUpload value="#{uploadFilesController.file}" mode="simple" skinSimple="true"/>
<p:commandButton value="Submit" ajax="false" action="#{uploadFilesController.parseFile}" skinSimple="true"/>
</h:form>
</ui:define>
</ui:composition>

Bean

@Component
@ViewScoped
public class UploadFilesController implements Serializable {
private static final long serialVersionUID = 1L;
public UploadedFile file;
public UploadedFile getFile() {
System.out.println("getFile");
return file;
}
public void setFile(UploadedFile file) {
this.file = file;
System.out.println("SET!");
}

public void parseFile() {
System.out.println(file.getFileName());
if (file != null) {
FacesMessage message = new FacesMessage("Successful", file.getFileName() + " is uploaded.");
FacesContext.getCurrentInstance().addMessage(null, message);
}
}
@PostConstruct
public void init() {
}
}

当我点击按钮时,在选择一些文件后,页面会更新,但后端不会发生任何事情。

如果我删除enctype="multipart/form-data",我会得到一个关于文件为null的错误。

实际上,您可以尝试下面的例子来创建一个自动的fileUpload。

web.xml(不确定是否需要(

<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-lass>
</filter>

.xhtml

<h:form enctype="multipart/form-data">
<p:fileUpload id="uploadFile" mode="simple" skinSimple="true"
value="#{backing.file}" label="Select new file"
auto="true" listener="#{backing.handleFileUpload}"/>
</h:form>

backing.java

public void handleFileUpload(FileUploadEvent event) {
UploadedFile newfile = event.getFile();
//do some checks on newly added file
}

最新更新