英文:
JSF inputfile : array of files to upload (syntax)
问题
在我的Java Bean中:
private List<Part> files = new ArrayList<Part>();
public void setFiles(List<Part> files) {
this.files = files;
}
public List<Part> getFiles() {
return files;
}
在我的XHTML中:
<div class="form-group">
<h:inputFile id="file1" value="#{theBean.files[0]}">
</h:inputFile>
<p:message for="file1"/>
<ui:fragment rendered="#{fn:length(theBean.files) > 1}">
<h:inputFile id="file2" value="#{theBean.files[1]}">
</h:inputFile>
</ui:fragment>
<ui:fragment rendered="#{fn:length(theBean.files) > 2}">
<h:inputFile id="file3" value="#{theBean.files[2]}">
</h:inputFile>
</ui:fragment>
</div>
我在Java代码中定义了一个要上传的文件数组,并且我想在XHTML中使用数组的索引。然而,Java代码并未被调用。有什么更好的解决方案可以保持列表结构。
英文:
Does my syntax is wrong to manage an array of files to upload?
In my java bean:
private List<Part> files = new ArrayList<Part>();
public void setFiles(List<Part> files) {
this.files = files;
}
public List<Part> getFiles() {
return files;
}
In my xhtml:
<div class="form-group">
<h:inputFile id="file1" value="#{theBean.files[0]}">
</h:inputFile>
<p:message for="file1"/>
<ui:fragment rendered="#{fn:length(theBean.files) > 1}">
<h:inputFile id="file2" value="#{theBean.files[1]}">
</h:inputFile>
</ui:fragment>
<ui:fragment rendered="#{fn:length(theBean.files) > 2}">
<h:inputFile id="file3" value="#{theBean.files[2]}">
</h:inputFile>
</ui:fragment>
</div>
I have an array of files to upload defined in my java code and I want to use the index of the array in the xhtml. The java code is not called. What is the better solution and keeping the list.
答案1
得分: 1
你的列表是空的。
System.out.println(files.size()); // 0
由于 Part
是不可变的,你最好使用一个可变的 bean 列表。
public class UploadedFile {
private Part value;
// Getter+setter.
}
private List<UploadedFile> files = new ArrayList<>();
@PostConstruct
public void init() {
files.add(new UploadedFile());
files.add(new UploadedFile());
System.out.println(files.size()); // 2
}
<h:inputFile value="#{bean.files[0].value}" />
或者,你可以选择使用一个普通的基础数组,你可以预先初始化它的固定大小。
private Part[] files = new Part[2]; // 2 项。
英文:
Your list is empty.
System.out.println(files.size()); // 0
As Part
is immutable, you'd better use a list of mutable beans instead.
public class UploadedFile {
private Part value;
// Getter+setter.
}
<!-->
private List<UploadedFile> files = new ArrayList<>();
@PostConstruct
public void init() {
files.add(new UploadedFile());
files.add(new UploadedFile());
System.out.println(files.size()); // 2
}
<!-- language: xhtml -->
<h:inputFile value="#{bean.files[0].value}" />
Or alternatively use a plain vanilla array instead which you can preinitialize with a fixed size.
private Part[] files = new Part[2]; // 2 items.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论