场景: 我有 ap:fileupload multiple="true"和 ap:datatable 下面。当我上传文件时,文件名和文件大小应添加到 ArrayList 中,并应显示在数据表中。对于每个附加的文件,arrayList 应该附加一个新行。
问题: 当我上传第一个文件时,数据表显示文件详细信息。但是当我上传第二个文件时,仅显示第二个文件的详细信息,并且以前的文件详细信息被删除。似乎数组列表正在重置。具体来说,仅显示最后附加的文件详细信息。
我的代码如下:
文件上传.xhtml
<p:fileUpload fileUploadListener="#{f.uploadTemp}" mode="advanced"
update="fileTable" multiple="true" />
<p:dataTable value="#{f.fileList }" var="file" id="fileTable">
<p:column headerText="FileName">
<p:commandLink id="ajax" actionListener="#{f.dowload}">
<h:outputText value="#{file.fileName }" />
</p:commandLink>
</p:column>
<p:column headerText="FileSize">
<h:outputText value="#{file.fileSize }" />
</p:column>
<p:column>
<p:commandButton value="X">
<f:setPropertyActionListener target="#{file.fileName}" value="#{f.filetobeDeleted }"/>
</p:commandButton>
</p:column>
</p:dataTable>
豆
@ManagedBean(name = "f")
@ConversationScoped
public class FileUploadBF implements Serializable {
private ArrayList<FileCarry> fileList = new ArrayList<FileCarry>();
public void uploadTemp(FileUploadEvent event) {
uploadedFile = event.getFile();
System.out.println("process upload");
FileCarry fc = new FileCarry(uploadedFile.getFileName(), uploadedFile.getSize());
this.fileList.add(fc);
}
public void setFileList(List<FileCarry> fileList) {
this.fileList = (ArrayList<FileCarry>) fileList;
}
public ArrayList<FileCarry> getFileList() {
return fileList;
}
public static class FileCarry {
public FileCarry(String name, long l) {
this.fileName = name;
this.fileSize = l;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getFileName() {
return fileName;
}
public void setFileSize(long fileSize) {
this.fileSize = fileSize;
}
public long getFileSize() {
return fileSize;
}
private String fileName;
private long fileSize;
}
}
解决方案: 应该在视图范围内。但是有人能说出为什么它在覆盖范围内不起作用吗?