我有一个p:uploadFile组件来上传文件。此外,我有一个上传按钮,上传文件,并在一些变量中设置文件名。文件已正确上载,并在相应变量中正确设置。
详细地
我的xhtml页面:
<h:form name="myUploadForm" enctype="multipart/form-data">
<p:commandButton action="#{controller.saveAllChanges}" value="Save" ajax="false" />
<p:dataTable....>
<p:column ... var="currentTableRow">
<p:commandButton value="Upload" ajax="false" title="#{msg.upload}"
action="#{controller.uploadFile(currentTableRow)}"
update=":table" />
<p:fileUpload id="upload" value="#{currentTableRow.myUploadedFile}" mode="simple"
skinSimple="true" label="Browse" auto="true" />
</column>
</p:dataTable>
</h:form>
我的控制器:
@ManagedBean
@ViewScoped
public class Controller implements Serializable {
...
public void uploadFile(TempDTO selectedDTO) {
FacesContext context = FacesContext.getCurrentInstance();
if (selectedDTO.getMyUploadedFile() != null && selectedDTO.getMyUploadedFile().getSize() > 0) {
...
}
}
public saveAllChanges(){
....
}
}
public class TempDTO {
...
...
private UploadedFile myUploadedFile;
public UploadedFile getMyUploadedFile() {
return myUploadedFile;
}
public void setMyUploadedFile(UploadedFile myUploadedFile) {
this.myUploadedFile = myUploadedFile;
}
}
在以下情况下会注意到问题:
-
-
调试
当按下上传按钮时,我的控制器中的方法显示一切正常,文件设置正确。在那个阶段,我可以看到它的文件大小、文件名等。
-
现在,在不执行任何其他操作的情况下,我按“保存”按钮保存表单中的所有更改。
-
在此阶段,除文件外,所有更改均正确提交。TempDTO中的myUploadedFile没有文件名,因为它的大小也是零。
value=“#{currentTableRow.myUploadedFile}”
我在上传组件中替换了每个表条目的文件。
更新
我在控制器中添加了一个UploadedFile,以便手动将TempDTO中的上传文件设置为:
@ManagedBean
@ViewScoped
public class Controller implements Serializable {
private UploadedFile myUploadedFile;
public UploadedFile getMyUploadedFile() {
return myUploadedFile;
}
public void setMyTemplateFile(UploadedFile myUploadedFile) {
this.myUploadedFile = myUploadedFile;
}
public void uploadFile(TempDTO selectedDTO) {
FacesContext context = FacesContext.getCurrentInstance();
selectedDTO.setTemplateFile(myUploadedFile);
if (selectedDTO.getMyUploadedFile() != null && selectedDTO.getMyUploadedFile().getSize() > 0) {
...
}
}
public saveAllChanges(){
....
}
}
<p:fileUpload id="upload" value="#{controller.myUploadedFile}" mode="simple"
skinSimple="true" label="Browse" auto="true" />
不,当我按下“Save”(保存)按钮并再次提交整个表单并调用saveAllChanges()时,myUploadedFile确实有一个文件名,但方法如下
getContents()
或
返回a
所以我仍然没有文件的内容。