情境: 我有一个p:fileupload multiple =“true”,下面是一个p:datatable。 当我上传文件时,文件名和文件大小应该添加到ArrayList中,并且应该显示在数据表中。对于附加的每个文件,arrayList应附加一个新行。
问题: 当我上传第一个文件时,数据表正在显示文件详细信息。 但是当我上传第二个文件时,仅显示第二个文件的详细信息,并删除以前的文件详细信息。好像数组列表正在重置。 具体而言,仅显示最后附加的文件详细信息。
我的代码如下:
Fileupload.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;
}
}
解决方案: 它应该在视野范围内。但是,有人可以说明为什么它在覆盖范围内不起作用吗?
答案 0 :(得分:0)
在我看来,你的bean范围可能有问题。你在其他地方开始谈话了吗?检查你的bean是否一次又一次地被创建?
您可以更改bean的范围,例如:@ViewScoped - 它应该有帮助。