如何将多个inputText映射到数组属性?

use*_*110 13 jsf jsf-2

我希望用户为JSF的inputText组件输入一个或多个名称.所以我想的是这样的托管bean:

public class MyBean {

    private String[] names;

    public String[] getNames() {
        return names;
    }

    public void setNames(String[] names) {
        this.names = names;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如何将JSF的inputText组件映射到此数组属性?

Bal*_*usC 14

首先,您需要在bean的(post)构造函数中保留数组.例如

public MyBean() {
    names = new String[3];
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以要么只是一个硬编码的索引来访问它们

<h:inputText value="#{myBean.names[0]}" />
<h:inputText value="#{myBean.names[1]}" />
<h:inputText value="#{myBean.names[2]}" />
Run Code Online (Sandbox Code Playgroud)

或者使用<ui:repeat>a varStatus来通过动态索引访问它们

<ui:repeat value="#{myBean.names}" varStatus="loop">
    <h:inputText value="#{myBean.names[loop.index]}" />
</ui:repeat>
Run Code Online (Sandbox Code Playgroud)

千万不能使用var类似属性

<ui:repeat value="#{myBean.names}" var="name">
    <h:inputText value="#{name}" />
</ui:repeat>
Run Code Online (Sandbox Code Playgroud)

提交表单时它不起作用,因为String没有值的setter(getter基本上就是toString()方法).