JSF inputfile:要上传的文件数组(语法)

huangapple go评论67阅读模式
英文:

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&lt;Part&gt; files = new ArrayList&lt;Part&gt;();

public void setFiles(List&lt;Part&gt; files) {
	this.files = files;
}
public List&lt;Part&gt; getFiles() {
	return files;
}

In my xhtml:

&lt;div class=&quot;form-group&quot;&gt;
    &lt;h:inputFile id=&quot;file1&quot; value=&quot;#{theBean.files[0]}&quot;&gt;
    &lt;/h:inputFile&gt;
    &lt;p:message for=&quot;file1&quot;/&gt;
    &lt;ui:fragment rendered=&quot;#{fn:length(theBean.files) &gt; 1}&quot;&gt;
		&lt;h:inputFile id=&quot;file2&quot; value=&quot;#{theBean.files[1]}&quot;&gt;
        &lt;/h:inputFile&gt;
    &lt;/ui:fragment&gt;
    &lt;ui:fragment rendered=&quot;#{fn:length(theBean.files) &gt; 2}&quot;&gt;
        &lt;h:inputFile id=&quot;file3&quot; value=&quot;#{theBean.files[2]}&quot;&gt;
        &lt;/h:inputFile&gt;
    &lt;/ui:fragment&gt;
&lt;/div&gt;

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&lt;UploadedFile&gt; files = new ArrayList&lt;&gt;();

@PostConstruct
public void init() {
    files.add(new UploadedFile());
    files.add(new UploadedFile());
    System.out.println(files.size()); // 2
}

<!-- language: xhtml -->

&lt;h:inputFile value=&quot;#{bean.files[0].value}&quot; /&gt;

Or alternatively use a plain vanilla array instead which you can preinitialize with a fixed size.

private Part[] files = new Part[2]; // 2 items.

huangapple
  • 本文由 发表于 2020年8月26日 05:56:28
  • 转载请务必保留本文链接:https://go.coder-hub.com/63587661.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定